NodeJ如何处理如此多的传入请求,它是否使用线程池?

时间:2011-11-08 19:36:26

标签: multithreading node.js

当请求进入nodejs服务器时,它如何处理请求?

我知道它有一种不同的处理请求的方式,因为它不会为每个请求生成一个新线程(或者我猜它也不使用传统的线程池)。

有人可以向我解释一下幕后发生了什么,linux的味道在这里是否重要?

2 个答案:

答案 0 :(得分:6)

不,它确实是异步IO。只有一个线程阻塞,直到某处发生某些事情,然后它处理该事件。这意味着一个进程中的一个线程可以为许多并发连接提供服务。有点像

endless loop {
  event = next_event()
  dispatch_event(event)
}

唯一的例外是文件系统的东西,它在底层使用了一个线程池。

答案 1 :(得分:3)

Node告诉操作系统(通过epollkqueue/dev/pollselect)在建立新连接时应该通知它,然后它去睡觉。如果有人连接,则执行回调。每个连接只是一个小堆分配

它是“事件驱动”,它以异步方式处理IO(非阻塞I / O)。它在内部执行epollkqueue/dev/pollselect处理所需的线程,但作为用户/客户端,它绝对是透明的。

e.g。 epoll实际上不是一个线程池,而是一个操作系统的I / O事件通知工具,node.js位于其上。