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

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

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

有人可以向我解释底下发生了什么事,而linux的味道在这里呢?

节点告诉操作系统(通过epollkqueue/dev/poll或者select ),当一个新的连接发生时应该通知它,然后进入睡眠状态。 如果有新的连接,则执行callback。 每个连接只有一个小的堆分配

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

例如, epoll并不是一个真正的线程池,而是一个OS的I / O事件通知工具, node.js位于其上。

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

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

唯一的例外是文件系统的东西,它使用线程池的引擎盖下。