Javascript 如何使这个JS函数异步? 函数takesTime(){ for(var i=0;ifor(var i=0;i
还可以查看每个循环增加几毫秒,尽管人们在那里做的工作似乎是基于浏览器的。Javascript是基于事件的,所有事情都发生在单个线程中。使其“异步”的方法是使用超时(setTimeout()).我看到这是标记的node.js,所以我将从这个角度回答:您不应该。通常,如果您正在阻塞,它将是:网络绑定(您应该使用和/或重用异步方法)、I/O绑定(您应该使用和/或重用),或CPU受限。您没有提供任何关于长时间运行任务的上下文,并且假设您有一个包含Javascript 如何使这个JS函数异步? 函数takesTime(){ for(var i=0;ifor(var i=0;i,javascript,node.js,Javascript,Node.js,还可以查看每个循环增加几毫秒,尽管人们在那里做的工作似乎是基于浏览器的。Javascript是基于事件的,所有事情都发生在单个线程中。使其“异步”的方法是使用超时(setTimeout()).我看到这是标记的node.js,所以我将从这个角度回答:您不应该。通常,如果您正在阻塞,它将是:网络绑定(您应该使用和/或重用异步方法)、I/O绑定(您应该使用和/或重用),或CPU受限。您没有提供任何关于长时间运行任务的上下文,并且假设您有一个包含一些非常大的数字的循环不变量,我假设您正在想象某个CPU密
一些非常大的数字的循环不变量
,我假设您正在想象某个CPU密集型任务在一个大字段上迭代
如果你实际上是CPU受限的,你应该重新考虑你的策略。节点只存在于一个核心上,所以即使你能够使用多线程,你也只是在转动你的轮子,因为每个请求仍然需要一定的CPU时间。如果你真的打算做一些计算密集型的事情,你可能想看看你的唱一首歌,然后让其他的东西来处理数据,这样可以更好地处理数据。您可以使用web workers来实现您的目标,但是您需要一个单独的js文件,并且您必须添加管道代码来发布消息并处理这些消息 node.js本机不支持web workers,但可在以下位置获得实现: 否则,它类似于以下代码:
for (var i = 0; i < someVeryLargeNumber; ++i) {
setTimeout(function () {
//do something synchronous
}, 0);
}
var pid=require('child_process').spawn('node',['childScript.js'])
pid.stdout.on('data',函数(data){
控制台日志(数据);
});
console.log('b');
childScript.js
for(var i=0;ifor (var i = 0; i < someVeryLargeNumber; ++i) {
setTimeout(function () {
//do something synchronous
}, 0);
}
var pid = require('child_process').spawn('node', ['childScript.js'])
pid.stdout.on('data', function(data) {
console.log(data);
});
console.log('b');
for (var i = 0; i < some_very_large_number; i++) {
// do something synchronous
}
console.log('a');