月度银墙 2018-08-24 03:53 采纳率: 100%
浏览 1417
已采纳

Node使用了多进程,但QPS(每秒查询率)没有线性增长

阅读《深入浅出Node.js》10.2.3小节,里面测试了单进程和多进程下QPS的对比,性能确实提高了,但是却没有解释为什么性能并没有与CPU的数量成线性增长。
我自己也试了,确实如此。

  • 写回答

2条回答 默认 最新

  • threenewbee 2018-08-24 11:15
    关注

    现在的处理器支持SMT(intel商标化的名称叫“超线程”),也就是说你看到的计算机上的逻辑处理器核心的数量比物理的要多(一般是2倍,在一些处理器上是4倍或者更多)
    但是逻辑处理器因为共享计算核心,所以并不能成倍提高性能。比如一个8逻辑处理器的计算机,实际上只有4个内核,那么它充其量只能比单个处理器内核提高大约5倍的性能。

    另一个问题是,虽然你的处理器可以并行,但是磁盘还是只有一个,如果两个进程需要同时访问磁盘完成查询,那么显然只能轮流访问而不是同时访问,这部分无法并行。别的资源也类似。
    因此,一个程序能加速到什么程度,取决于可以并行的代码的比例。
    假设一个程序中有50%的操作不能并行,那么即便你有无穷多个处理器,并发无穷多个进程,那么你的程序的运行速度相比较单进程也最多提高2倍。
    (50%无法并行的部分所用的时间假设是t/2,50%可以并行的操作用时是t/2,总时间是t/2+t/2=t,假设你有无穷多个进程,那么总时间就是t/2+0=t/2)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码