我刚刚观看了以下视频:Node.js简介,但仍然不了解如何获得速度优势。
主要是在某一点上,Ryan Dahl(Node.js的创建者)说Node.js是基于事件循环的,而不是基于线程的。线程很昂贵,只应留给并行编程专家使用。
稍后,他然后展示了Node.js的体系结构堆栈,该体系结构堆栈具有基础的C实现,该实现在内部具有自己的线程池。因此,显然,Node.js开发人员永远不会启动自己的线程或直接使用线程池...他们使用异步回调。我很明白。
我不明白的是,Node.js仍在使用线程...只是在隐藏实现,因此,如果50个人很好地请求50个文件(当前不在内存中),那么不需要50个线程,这样做会更快吗? ?
唯一的区别是,由于它是在内部进行管理的,因此Node.js开发人员不必对线程详细信息进行编码,而是在其下方仍在使用线程来处理IO(阻止)文件请求。
因此,您难道不是真的只遇到一个问题(线程)并在该问题仍然存在时将其隐藏:主要是多个线程,上下文切换,死锁等吗?
必须有一些我仍然不明白的细节。
线程仅用于处理没有异步功能的函数,例如
stat()
。该
stat()
函数始终处于阻塞状态,因此node.js需要使用一个线程来执行实际的调用而不会阻塞主线程(事件循环)。潜在地,如果您不需要调用那些函数,则永远不会使用线程池中的任何线程。