[已解决]如何理解node单线程?
发布于 7 年前 作者 huangnaiang 4373 次浏览 最后一次编辑是 5 年前

看这篇文章的时候对以下这句话不理解,求指教。 文章:http://cnodejs.org/topic/50462f51329c5139760bff98#528c7479d2b3893f2ab4939e

“Apache是多线程的:它为每个请求开启一个新的线程(或者是进程,这取决于你的配置),当并发连接增多时,你可以看看它是怎么一点一点耗尽内存的。Nginx和Node.js不是多线程的,因为线程的消耗太“重”了。”

请问这句话怎么理解,难道node是一个线程处理多个请求? 比如有三个人同时访问一个node站点,这三个请求是一个线程处理还是三个线程处理?


写了段代码验证了一下,确实是一个线程处理多个请求,感谢各位。 下面这段代码 同时开两个标签页请求,第二个标签页会等10秒才显示hello

var http = require('http');
var wait = function(millisec) {
    var now = new Date;
    while(new Date - now <= millisec) ;
}
http.createServer(function(req, res){
    wait(5000);
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end('hello');
}).listen(3000);
7 回复

一个线程处理这3个请求。

NodeJS是运行的多线程,Nodejs 说过当你要执行一个很耗时间的操作,那么请你创建一个线程。 他的机制是异步回调,windows采用IOCP机制,linux采用epoll

"Nodejs 说过当你要执行一个很耗时间的操作,那么请你创建一个线程" 很耗时的操作是指io吗? 你的意思是node会另起一个线程进行io? 如果是这个意思那我不同意你的说法

@zhs077 你说的另起一个线程是指NODE自己起的线程么?据我所知,只有I/O操作因为在linux下必然会导致阻塞,才会用libeio起线程来跑异步外,其他好像还真没有了,如果是用户自己想起的话,因为的V8是不允许多线程调用接口的,所以node的多线程应该还是很难见的吧?

@perterpon可以同过addons 编写多线程的啊

《深入浅出node.js》前几章对这个问题有很清晰的解释。

回到顶部