Qia*_*hen 6 multithreading callback node.js
我经常听到Node只在一个线程中运行.但是,我不明白的是节点如何只用一个线程进行非阻塞.假设有100个并发请求进入节点Web服务器,服务器生成100个回调来处理请求.如果每个100个回调需要1秒即可完成,而如果所有的人都在1个线程,他们在一系列的工作要做,它意味着它将100秒阻止?
来自博客了解 node.js 事件循环
当前编程技术最大的浪费来自等待 I/O 完成。有几种方法可以处理性能影响(来自 Sam Rushing):
fork 一个新进程:你启动一个新进程来处理每个请求。优点:简单 缺点:不能很好地扩展,数百个连接意味着数百个进程。fork() 是 Unix 程序员的锤子。因为它是可用的,所以每个问题看起来都像钉子。这通常是矫枉过正
线程:启动一个新线程来处理每个请求。优点:比使用 fork 更容易,对内核更友好,因为线程的开销通常要少得多。
Node.js 为您的代码保留一个线程......
它确实是一个单线程运行:你不能并行执行任何代码;例如,执行“睡眠”将阻止服务器一秒钟:
while(new Date().getTime() < now + 1000) {
// do nothing
}
Run Code Online (Sandbox Code Playgroud)
因此,当该代码正在运行时,node.js 不会响应来自客户端的任何其他请求,因为它只有一个线程来执行您的代码。或者,如果您有一些 CPU 密集型代码,例如,用于调整图像大小,那仍然会阻止所有其他请求。
| 归档时间: |
|
| 查看次数: |
4055 次 |
| 最近记录: |