【发布时间】:2011-11-09 03:41:30
【问题描述】:
当请求进入nodejs服务器时,它如何处理请求?
我知道它有不同的处理请求的方式,因为它不会为每个请求生成一个新线程(或者我猜它也不使用传统的线程池)。
谁能向我解释一下幕后发生了什么,Linux 的风格在这里重要吗?
【问题讨论】:
当请求进入nodejs服务器时,它如何处理请求?
我知道它有不同的处理请求的方式,因为它不会为每个请求生成一个新线程(或者我猜它也不使用传统的线程池)。
谁能向我解释一下幕后发生了什么,Linux 的风格在这里重要吗?
【问题讨论】:
不,它执行异步 IO。只有一个线程阻塞,直到某处发生某事,然后它处理该事件。这意味着一个进程中的一个线程可以服务多个并发连接。有点像
endless loop {
event = next_event()
dispatch_event(event)
}
唯一的例外是文件系统,它在后台使用线程池。
【讨论】:
Node 告诉操作系统(通过epoll、kqueue、/dev/poll 或select)它应该在建立新连接时得到通知,然后它进入睡眠状态。如果有人新连接,那么它会执行回调。每个连接只是一个小的堆分配
它是“事件驱动”的,它以异步方式处理 IO(非阻塞 I/O)。它在内部执行epoll、kqueue、/dev/poll 或select 处理所需的线程,但对于作为用户/客户端的您来说,它是绝对透明的。
例如epoll 并不是真正的线程池,而是操作系统的 I/O 事件通知工具,node.js 位于其之上。
【讨论】: