有关回调被阻塞的疑问
发布于 10 年前 作者 xiuxu123 3635 次浏览 最后一次编辑是 8 年前

Node是非阻塞IO大家都知道,不过我有个疑问:


var http = require('http');

http.createServer(function(req, res){
 dosomething(function(data){
  dothing....................    //这里在做一些事
  res.writeHead(200);
  res.end("<h1>Hi!</h1>");
 });
}).listen(8001);

这里创建一个http服务器,如果同时有多个请求进来,但是如果回调函数里面dothing....这里要消耗很多时间,那么就算其他的请求进来不也是会被阻塞吗?(也就是说如果回调函数需要消耗很多的时间,被回调函数给挡住了,其他的请求不也是会被阻塞吗?)毕竟Node是单线程的!

请问大家有没有遇到这个问题?都是怎么解决的啊??

2 回复

是的。如果dothing是同步的就没法解决。 所以node.js不适合CPU密集型

我的经验是取消cluster模式,node.js只用单进程,只做最基本的服务。耗CPU的事情,用child_process.exec交给别的程序去做。举个例子,如果你需要对图片做操作,就调用imagemagick。

回到顶部