gpt4 book ai didi

node.js - Node.js 在内部仍然使用线程的情况下如何本质上更快?

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:10 25 4
gpt4 key购买 nike

引用以下讨论: How is Node.js inherently faster when it still relies on Threads internally?

在查看所有回复后,我仍然有基本问题:如果进行数据库调用,“某人”必须阻止调用返回。它在深处变成了阻塞调用。必须有人调用数据库。 “某人”必须是一个线程。如果有 50 个 DB 调用,虽然它们对于 Javascript 来说似乎是非阻塞的,但实际上它们都被阻塞了。如果有 50 个调用,为了让它们在数据库上一起触发,它们必须由一个线程分别发送到数据库。这意味着将有 50 个线程已发送数据库调用并正在等待其调用返回。这与 Apache 中的 50 个线程没有什么不同。请纠正我的理解。 Node.js 巧妙地做了什么以及如何确保在这种情况下运行的线程少于 50 个?

最佳答案

你……部分正确。如果有 50 个并发数据库调用,则意味着 50 个线程,每个线程专用于一个数据库调用(实际上,默认情况下, Node 在其线程池中仅提供 4 个并发线程,如果您想要更多线程,则必须明确指定您愿意允许 Node 旋转的线程数量;请参阅我的答案 here - 任何多余的请求都会排队)。

比 Apache 更高效的原因是,每个线程都专用于最小的功能单元……它仅在该数据库调用的生命周期内存在,然后就被放弃(在这种情况下,会创建一个新线程,直到达到限制,然后该线程被放回池中)。这与 Apache 形成鲜明对比,Apache 为每个新请求启动一个线程,并且可能必须为多个数据库调用和其他处理提供服务,直到该请求完成并可以放弃。

最终,这会导致每个线程花费更多的时间来做工作或在池中等待更多的工作,而空闲和不可用的时间更少。

请注意,这取决于工作负载,有些工作负载在 Apache 模型中工作得更好,但一般来说,大多数 Web 样式工作负载更适合 Node 模型。

关于node.js - Node.js 在内部仍然使用线程的情况下如何本质上更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30195323/

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