代码之家  ›  专栏  ›  技术社区  ›  jwkoo

计算机逻辑核与nodejs线程池的关系

  •  1
  • jwkoo  · 技术社区  · 6 年前

    我读过很多关于stackoverflow的文章,但是没有找到任何关于计算机逻辑核心和nodejs线程池之间关系的参考。我相信这不是重复的问题。

    我使用的是2017 MacBook Pro,它有2个物理核心和4个线程(4个逻辑核心)

    我相信nodejs在执行诸如pbkdf2(crypto module内部的函数)、I/O操作等重任务时使用的线程池大小为4(与libuv一起引用)。

    我的问题是,计算机的线程大小和nodejs的线程池大小之间有什么关系?

    实际上,我从未想过电脑的线程。

    这听起来可能很疯狂,但到目前为止我认为计算机只有物理核心,如果nodejs实例等应用程序支持线程池(在本例中,线程池大小默认为4),那么计算机可以使用多线程。

    那么这两者到底是什么关系呢?

    我是否必须将线程池的大小更改为计算机的逻辑核心的数量,以最大限度地提高性能…?

    1 回复  |  直到 6 年前
        1
  •  2
  •   jfriend00    6 年前

    node.js不会根据存在的CPU或逻辑CPU动态调整线程池大小。它有一个预设值(4),除非您自定义它。

    由于thread pool通常用于阻塞磁盘I/O等操作,因此线程池大小的最佳值不一定是您拥有的逻辑CPU数量(与集群的典型建议不同)。

    相反,它可能取决于您最希望优化哪些特定类型的操作,以及您使用这些操作的具体方式。例如,它可能并不能真正帮助您进行越来越多的并行磁盘操作,这些操作都试图访问同一个物理磁盘,因为读/写头一次只能移动一个位置,所以有很多并行操作,所有的竞争相同的读/写头可能不会加快速度(甚至可以MAK事情变慢了)。

    如果您有一个要优化的特定操作,那么您的最佳选择是创建一个可复制的基准测试,然后用几个不同大小的线程池对其计时。

    正如在评论中指出的,您可以研究一些相关的线程池代码 here .