当请求进入nodejs服务器时,它如何处理请求?
我知道它有一种不同的处理请求的方式,因为它不会为每个请求生成一个新线程(或者我猜它也不使用传统的线程池)。
有人可以向我解释一下幕后发生了什么,linux的味道在这里是否重要?
答案 0 :(得分:6)
不,它确实是异步IO。只有一个线程阻塞,直到某处发生某些事情,然后它处理该事件。这意味着一个进程中的一个线程可以为许多并发连接提供服务。有点像
endless loop {
event = next_event()
dispatch_event(event)
}
唯一的例外是文件系统的东西,它在底层使用了一个线程池。
答案 1 :(得分:3)
Node告诉操作系统(通过epoll
,kqueue
,/dev/poll
或select
)在建立新连接时应该通知它,然后它去睡觉。如果有人连接,则执行回调。每个连接只是一个小堆分配
它是“事件驱动”,它以异步方式处理IO(非阻塞I / O)。它在内部执行epoll
,kqueue
,/dev/poll
或select
处理所需的线程,但作为用户/客户端,它绝对是透明的。
e.g。 epoll实际上不是一个线程池,而是一个操作系统的I / O事件通知工具,node.js
位于其上。