gpt4 book ai didi

node.js - 为什么 Node.js 是单线程的?

转载 作者:IT老高 更新时间:2023-10-28 21:45:07 27 4
gpt4 key购买 nike

在基于 PHP(或 Java/ASP.NET/Ruby)的网络服务器中,每个客户端请求都在一个新线程上实例化。但是在 Node.js 中,所有客户端都在同一个线程上运行(它们甚至可以共享相同的变量!)我知道 I/O 操作是基于事件的,因此它们不会阻塞主线程循环。

我不明白为什么 Node 的作者选择它是单线程的?它使事情变得困难。例如,我无法运行 CPU 密集型函数,因为它阻塞了主线程(并且新的客户端请求被阻塞)所以我需要生成一个进程(这意味着我需要创建一个单独的 JavaScript 文件并在其上执行另一个 Node 进程它)。但是,在 PHP 中,CPU 密集型任务不会阻塞其他客户端,因为正如我所提到的,每个客户端都在不同的线程上。与多线程 Web 服务器相比,它有哪些优势?

注意:我已经使用集群来解决这个问题,但它并不漂亮。

最佳答案

Node.js 是作为异步处理的实验显式创建的。其理论是,在单个线程上进行异步处理可以在典型的 Web 负载下提供比典型的基于线程的实现更高的性能和可扩展性。

你知道吗?在我看来,这个理论已经得到证实。与 Apache 或 IIS 或其他基于线程的服务器相比,不执行 CPU 密集型工作的 node.js 应用可以运行数千个以上的并发连接。

单线程、异步特性确实使事情变得复杂。但是你真的认为它比线程更复杂吗?一个比赛条件可能会毁了你整个月!或者由于某处的某些设置而清空您的线程池,并观察您的响应时间缓慢到爬行!更不用说死锁、优先级倒置以及多线程带来的所有其他问题。

最后,我不认为这是普遍的好坏;它是不同的,有时它更好,有时它不是。为工作使用正确的工具。

关于node.js - 为什么 Node.js 是单线程的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17959663/

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