节点的事件循环和计算密集型任务问题> 0.8

时间:2014-01-21 20:08:22

标签: node.js express event-handling

我想要做的是在我NodEO的进化算法之上添加一个REST服务器。我关注的是these steps,这基本上意味着

app.listen(port)
do_compute_intensive_task()

然后

function do_compute_intensive_task() {
  do_lots_of_stuff();
  if (not_finished) {
     process.nextTick(do_compute_intensive_task());
  } else {
     console.log("We're done" );
  }
}

已经签入(我知道,我不应该)here。计算密集型部分运行得很好,但REST服务器没有应答,它会停止连接,直到密集部分完成。我安装了最后一个节点v0.10.24,它不起作用。这是uname -a

Linux penny 3.8.0-35-generic #50-Ubuntu SMP Tue Dec 3 01:24:59 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

但它在另一台具有不同版本节点和较慢处理器的机器上工作:版本为v0.8.18,处理器为i5且uname -a返回

Linux amy 3.8.0-35-generic #50~precise1-Ubuntu SMP Wed Dec 4 17:25:51 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

现在的问题是:我做错了什么?什么?什么东西?这是一个错误吗?它与处理器速度有关吗?

更新我已安装nave(你也应该)检查不同的版本,它在0.9版本的某个地方停止工作。它适用于最新版本的0.8(0.8.26),它不再适用于最新的0.9或最新的0.11.10

2 个答案:

答案 0 :(得分:1)

节点社区投票决定在岛外使用process.nextTick()。为了您的阅读乐趣:

https://github.com/joyent/node/issues/3335

答案 1 :(得分:0)

事实上,已经回答in the nodejs issues queue (and quite fast)。 process.nextTick优先考虑计算密集型事件。如果您希望他们等待io,请使用setImmediate。已修复this commit to nodeo