有关回调被阻塞的疑问
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。