计算机逻辑核心与nodejs线程池的关系
relationship between computer logical cores and nodejs threadpool
我已经阅读了很多关于 Whosebug 的文章,但是没有找到任何关于计算机逻辑核心和 nodejs 线程池之间关系的参考资料。我相信这不是重复的问题。
我正在使用 2017 macbook pro,它有 2 个物理内核和 4 个线程(4 个逻辑内核)
而且我相信 nodejs 在执行诸如 pbkdf2(加密模块内部的函数)、i/o 操作等繁重任务时使用大小为 4 的线程池(参考 libuv)。
我的问题是,计算机的线程大小和nodejs的线程池大小之间有什么关系?
其实我从来没想过电脑的线程
这听起来很疯狂,但到目前为止我认为计算机只有物理核心,如果 nodejs 实例等应用程序支持线程池(在这种情况下线程池大小默认为 4),那么计算机可以利用多线程.
那么这两者到底是什么关系呢?
我是否必须将 THREADPOOL_SIZE 更改为计算机的逻辑核心数才能最大化性能..?
node.js 不会根据存在的 CPU 或逻辑 CPU 动态调整线程池大小。它有一个预设值 (4),除非您自定义它。
因为线程池通常用于阻塞操作,例如磁盘 I/O,所以线程池大小的最佳值不一定是您拥有的逻辑 CPU 的数量(不同于对聚类)。
相反,这可能取决于您最想针对哪些特定类型的操作进行优化,以及您如何使用这些操作。例如,进行越来越多的并行磁盘操作并试图访问同一个物理磁盘可能并没有多大帮助,因为 read/write 磁头一次只能移动一个位置,所以许多并行操作都在争夺同一个 read/write 头可能不会加快速度(甚至可能使事情变慢)。
如果您有一个特定的操作要尝试优化,那么最好的办法是创建一个可重现的基准测试,然后用几个不同大小的线程池对其进行计时。
有评论指出,可以研究一下线程池相关的一些代码here。
我已经阅读了很多关于 Whosebug 的文章,但是没有找到任何关于计算机逻辑核心和 nodejs 线程池之间关系的参考资料。我相信这不是重复的问题。
我正在使用 2017 macbook pro,它有 2 个物理内核和 4 个线程(4 个逻辑内核)
而且我相信 nodejs 在执行诸如 pbkdf2(加密模块内部的函数)、i/o 操作等繁重任务时使用大小为 4 的线程池(参考 libuv)。
我的问题是,计算机的线程大小和nodejs的线程池大小之间有什么关系?
其实我从来没想过电脑的线程
这听起来很疯狂,但到目前为止我认为计算机只有物理核心,如果 nodejs 实例等应用程序支持线程池(在这种情况下线程池大小默认为 4),那么计算机可以利用多线程.
那么这两者到底是什么关系呢?
我是否必须将 THREADPOOL_SIZE 更改为计算机的逻辑核心数才能最大化性能..?
node.js 不会根据存在的 CPU 或逻辑 CPU 动态调整线程池大小。它有一个预设值 (4),除非您自定义它。
因为线程池通常用于阻塞操作,例如磁盘 I/O,所以线程池大小的最佳值不一定是您拥有的逻辑 CPU 的数量(不同于对聚类)。
相反,这可能取决于您最想针对哪些特定类型的操作进行优化,以及您如何使用这些操作。例如,进行越来越多的并行磁盘操作并试图访问同一个物理磁盘可能并没有多大帮助,因为 read/write 磁头一次只能移动一个位置,所以许多并行操作都在争夺同一个 read/write 头可能不会加快速度(甚至可能使事情变慢)。
如果您有一个特定的操作要尝试优化,那么最好的办法是创建一个可重现的基准测试,然后用几个不同大小的线程池对其进行计时。
有评论指出,可以研究一下线程池相关的一些代码here。