Node.js process.nextTick仍然阻止服务器获取请求

时间:2015-10-25 13:35:06

标签: javascript node.js http event-loop

我得到了这段代码:



import http from 'http';

function compute() {
  let [sum, i] = [1, 1];
  while (i<1000000000) {
    5*2 
    i++;
  }
  console.log("good");
  process.nextTick(compute);
}

http.createServer((request, response) => {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World');
}).listen(5000, '127.0.0.1');

http.request({hostname: '127.0.0.1', port: 5000}, (response) => {
  console.log("here !");
}).end();

compute();
&#13;
&#13;
&#13;

输出总是:&#34;好,&#34;好&#34; ... 并且没有调用HTTP请求。 我认为process.nextTick应该解决这个问题,但服务器仍然被阻止。为什么?我该如何解决?

1 个答案:

答案 0 :(得分:4)

而不是process.nextTick而不是使用set setImmediate。传递给nextTick的回调在IO回调之前处理,而传递给setImmediate的回调在任何已经挂起的回调之后处理。

process.nextTick(compute);替换为setImmediate(compute);

也可以将CPU工作转移到子进程或工作进程。但我不会描述这一点,因为我的主要观点是如何解释:

function compute() {
  ...
  console.log("good");
  process.nextTick(compute);
}

会阻止HTTP服务器处理忽略具有其自身问题的while循环的请求。

有关详情,请参阅setImmediate vs. nextTick