繁体   English   中英

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

[英]Node.js process.nextTick still blocking server from getting requests

我得到了这段代码:

 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(); 

该输出始终是:“好”,“好” ...并且未调用HTTP请求。我认为process.nextTick应该可以解决该问题,但是服务器仍然被阻止。 ?

代替process.nextTick而是使用set setImmediate 传递给nextTick回调将在IO回调之前进行处理,而传递给setImmediate回调将在已处理的回调之后进行处理。

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

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

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

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

有关更多信息,请参见setImmediate与nextTick

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM