首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Nodejs由于不能使用多个cpu内核而不能使用单线程,从而使更多并发用户的使用速度变慢了吗?

Nodejs由于不能使用多个cpu内核而不能使用单线程,从而使更多并发用户的使用速度变慢了吗?
EN

Stack Overflow用户
提问于 2016-06-16 10:05:21
回答 1查看 829关注 0票数 0

如果您有10000个并发用户,并且只有一个nodejs线程来处理所有这些请求,那么nodejs有什么好处呢?我知道处理将异步进行,但请求将被同步处理。那么,9999和10000用户是否需要等待nodejs接收到之前的所有请求,并为所有请求启动相应的非阻塞请求?这难道不使nodejs在大量并发请求到达服务器并且即使单个线程重载时也不能生成不同的线程时更慢吗?

EN

回答 1

Stack Overflow用户

发布于 2016-06-16 10:42:10

在较低的水平上,有相当多的参数将共同影响节点性能的拐点:

  1. 真正并发请求的数量:如果请求得到足够的分发(就像在实际工作负载场景中那样),节点线程将准备好在请求到达时满足请求。相反,如果到达服务器系统的真正并发请求的数量增加,正如您指出的那样,单线程顺序执行将开始阻塞节点。
  2. 如果您使用一个专用于单个I/O的线程来度量实现阻塞I/O模型的系统的性能,您可能会看到比节点更好的结果。但是,当并发请求增加时,您将不得不按照并发请求的比例生成专用线程,因为并发请求占用了大量内存和CPU。或者,您可以使用线程池,在这种情况下,由于上下文切换开销,线程将导致性能损失。最后,可以通过使用异步I/O通道来改善这种情况,其中线程不是硬绑定到任何套接字,而是在套接字通道中工作。节点是同一节点的简单实例。
  3. 当并发请求超出限制时,内核I/O缓冲区会变得过载,从而进一步阻塞数据流。

在更低的水平上,可能会有更多。简而言之,是节点将在负载的某个点达到拐点(饱和和性能下降),而不一定是在10K请求时达到拐点,而是取决于数据流、请求速率、系统资源、系统负载等。

理想情况下,您提出的生成新线程来处理请求的建议是有意义的,但是多线程的存在会在语言中造成大量新的语义,并在节点运行时造成大量额外负担,这将抵消它目前展示的优越性能。

一个更实用的解决方案是水平负载平衡。

希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37856033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档