我知道Node.js使用单线程和事件循环来处理请求,一次只处理一个(非阻塞).但是,如何工作,让我们说10,000个并发请求.事件循环将处理所有请求?这不会花太长时间吗?
我无法理解它是如何比多线程Web服务器更快的.据我所知,多线程Web服务器的资源(内存,CPU)会更昂贵,但它不会更快吗?我可能错了; 请解释这个单线程如何在大量请求中更快,以及在处理大量请求(例如10,000)时它通常会做什么(在高级别).
而且,那个单线程是否能够很好地扩展?请记住,我刚刚开始学习Node.js.
在基于PHP(或Java/ASP.NET/Ruby)的Web服务器中,每个客户端请求都在新线程上实例化.但是在Node.js中,所有客户端都运行在同一个线程上(它们甚至可以共享相同的变量!)我知道I/O操作是基于事件的,所以它们不会阻塞主线程循环.
我不明白的是为什么Node的作者选择它是单线程的?这让事情变得困难.例如,我无法运行CPU密集型功能,因为它阻塞了主线程(并阻止了新的客户端请求),因此我需要生成一个进程(这意味着我需要创建一个单独的JavaScript文件并在其上执行另一个节点进程) ).但是在PHP中,cpu密集型任务不会阻止其他客户端,因为我提到每个客户端都在不同的线程上.与多线程Web服务器相比,它有哪些优势?
注意:我已经使用群集来解决这个问题,但它并不漂亮.
node.js ×2