gpt4 book ai didi

multithreading - Nodejs中的单线程是什么意思

转载 作者:搜寻专家 更新时间:2023-10-31 22:34:05 24 4
gpt4 key购买 nike

我经常听说 Node 只在一个线程中运行。但是,我不明白的是 Node 如何只用一个线程进行非阻塞。假设有 100 个并发请求到达 Node Web 服务器,服务器生成 100 个回调来处理请求。如果这 100 个回调中的每一个都需要 1 秒才能完成,并且如果它们都在 1 个线程中,它们必须串联完成,是否意味着它会阻塞 100 秒?

最佳答案

来自博客Understanding the node.js event loop

当前编程技术最大的浪费来自等待 I/O 完成。有几种方法可以处理性能影响(来自 Sam Rushing):

  • 同步:您一次处理一个请求,每个请求依次处理。优点:简单的缺点:任何一个请求都可以阻止所有其他请求
  • 创建一个新进程:您启动一个新进程来处理每个请求。优点:容易 缺点:不能很好地扩展,数百个连接意味着数百个进程。 fork() 是 Unix 程序员的锤子。因为它可用,所以每个问题看起来都像钉子。这通常是矫枉过正

  • 线程:启动一个新线程来处理每个请求。优点:比使用 fork 更简单,对内核更友善,因为线程的开销通常要少得多p>

Node.js 为您的代码保留一个线程......

它真的是一个单线程运行:你不能做任何并行代码执行;例如,做一个“ sleep ”将阻塞服务器一秒钟:

while(new Date().getTime() < now + 1000) {
// do nothing
}

因此,当该代码运行时,node.js 不会响应来自客户端的任何其他请求,因为它只有一个线程来执行您的代码。或者,如果您有一些 CPU 密集型代码,例如,用于调整图像大小的代码,它仍然会阻止所有其他请求。

Read more

关于multithreading - Nodejs中的单线程是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20224160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com