NodeJ如何处理如此多的传入请求,是否使用线程池?
当请求进入nodejs服务器时,它是如何处理请求的?
我知道它有不同的处理请求的方式,因为它不会为每个请求产生一个新的线程(或者我猜它不会使用传统的线程池)。
有人可以向我解释底下发生了什么事,而linux的味道在这里呢?
节点告诉操作系统(通过epoll
, kqueue
, /dev/poll
或者select
),当一个新的连接发生时应该通知它,然后进入睡眠状态。 如果有新的连接,则执行callback。 每个连接只有一个小的堆分配
这是“事件驱动”,它以asynchronous方式处理IO(非阻塞I / O)。 它在内部执行epoll
, kqueue
, /dev/poll
或select
处理所需的线程,但对于作为用户/客户端的你来说,它是绝对透明的。
例如, epoll并不是一个真正的线程池,而是一个OS的I / O事件通知工具, node.js
位于其上。
不,它做asynchronousIO。 只有一个线程阻塞,直到事情发生,然后处理该事件。 这意味着一个进程中的一个线程可以为多个并发连接提供服务。 有点像
endless loop { event = next_event() dispatch_event(event) }
唯一的例外是文件系统的东西,它使用线程池的引擎盖下。
- Meteor.setTimeout和Meteor.methods之间的并发性
- node.js非阻塞POST请求等待另一个POST请求
- 如何增加使用集群的NodeJS服务器的吞吐量?
- Java NIO非阻塞模式vs node.jsasynchronous操作
- Node实际创build了多less个线程?
- 仅在NodeJs上构build网站,在http上构buildExpress阻止请求
- NodeJS读取和写入线程/工人的CSV
- node-opencv npm – 即使节点是单线程的,它会执行multithreading计算吗?
- Node.js的事件驱动有什么不同? 我们不能在ASP.Net的HttpAsyncHandler中做到这一点吗?