我知道Node.js使用单线程和事件循环来处理一次仅处理一个请求的请求(这是非阻塞的)。但是,这是如何工作的,可以说有10,000个并发请求。事件循环会处理所有请求吗?那会不会花费太长时间?
我还不了解(至今)如何比多线程Web服务器更快。我知道多线程Web服务器的资源(内存,CPU)会更昂贵,但是会不会更快?我可能错了;请说明在处理大量请求时此单线程的速度如何,以及在处理诸如10,000之类的大量请求时通常会执行的操作(高级)。
而且,单线程是否可以很好地扩展?请记住,我才刚刚开始学习Node.js。
slebetman的答案:当您说
Node.JS
可以处理10,000个并发请求时,它们本质上是非阻塞请求,即这些请求主要与数据库查询有关。在内部,
event loop
中Node.JS
受理的thread pool
,其中每个线程处理一个non-blocking request
和事件循环继续委托工作的线程之一后,听取更多的要求thread pool
。当其中一个线程完成工作时,它会向发出信号,event loop
表明它也已完成callback
。Event loop
然后处理此回调并将响应发送回去。当您刚接触NodeJS时,请阅读更多有关内容
nextTick
以了解事件循环在内部如何工作的信息。阅读http://javascriptissexy.com上的博客,当我开始使用JavaScript / NodeJS时,它们对我真的很有帮助。