我已经阅读了很多关于stackoverflow的文章,但是未能找到有关计算机逻辑核心与nodejs线程池之间关系的任何参考。我相信这不是重复的问题。
我正在使用的Macbook Pro 2017具有2个物理核心和4个线程(4个逻辑核心)
而且我相信在做诸如pbkdf2(加密模块内部的函数),I / O操作之类的繁重工作时,nodejs使用4的线程池大小(使用libuv进行引用)。
我的问题是,计算机的线程大小和nodejs的线程池大小之间是什么关系?
实际上我从未想过计算机的线程。
这听起来可能很疯狂,但是到目前为止,我相信计算机只有物理核心,并且如果诸如nodejs实例之类的应用程序支持线程池(在这种情况下,默认情况下线程池大小为4),则计算机可以利用多线程。 / p>
那两者之间到底是什么关系?
我是否必须将THREADPOOL_SIZE更改为计算机逻辑核心的数量才能最大化性能??
答案 0 :(得分:2)
node.js不会根据存在的CPU或逻辑CPU动态调整线程池大小。除非您自定义它,否则它有一个预设值(4)。
由于线程池通常用于阻止磁盘I / O等操作,因此线程池大小的最佳值不一定就是您拥有的逻辑CPU的数量(与典型的群集建议不同)。
相反,这可能取决于您最想优化哪些特定类型的操作以及您如何使用这些操作。例如,进行越来越多的并行磁盘操作(它们都试图访问同一物理磁盘)可能并没有太大帮助,因为读/写头一次只能移动一个位置,因此有很多所有争夺同一个读写头的并行操作可能不会加快速度(甚至可能使速度变慢)。
如果您要针对某个特定操作进行优化,那么最好的选择是创建一个可重现的基准测试,然后为线程池设置几种不同大小的时间。
正如评论中指出的那样,您可以研究一些相关的线程池代码here。