我可以非常轻松地在Node.js中编写非阻塞I/O 。这是整个图书馆的目的。
但是完成的任何计算都是阻塞的。任何通过事件发射器的消息都是阻塞的。
例如,发出事件会立即解决,因此是阻塞的:
var e = new process.EventEmitter;
e.on("foo", function() {
console.log("event");
});
process.nextTick(function() {
console.log("next tick");
});
setTimeout(function() {
console.log("timeout");
}, 0);
e.emit("foo");
> event
> next tick
> timeout
除了包装调用nextTick
,我如何使代码非阻塞?
我希望在事件循环的每个周期中尽可能少地进行计算,以便我可以同时为尽可能多的客户端提供服务。
如何以非阻塞方式编写代码?
当我有非阻塞代码时,如何跨多个进程扩展它?
一种选择是等待 WebWorker 子流程 API 完成。