【发布时间】:2021-07-18 03:28:07
【问题描述】:
我了解 Node.js 应用程序在单线程上运行,但主要会将异步操作(例如 I/O)移交给可以在多个线程中运行的操作系统。
我的问题是这些多线程操作也可以在多核上运行吗?如果是这样,这是否意味着我仍然可以通过在多核容器上运行单个节点进程来获得性能?在多核容器上运行单节点应用程序有什么好处吗?
【问题讨论】:
-
I/O 取决于 CPU 的 I/O 通道数量,在现代台式机和服务器 CPU 中,这意味着 PCI 通道。 I/O 不依赖于 CPU 的内核数量,因为 I/O 不在线程上运行 - 它们由硬件处理。只有当硬件完全繁忙时,操作系统才会使用 PCI 通道轮流进行 I/O,就像操作系统使用内核轮流使用线程一样。对于网络 I/O,这取决于您拥有多少网卡(中继)。否则网络 I/O 将被序列化为单个比特流,因为那是线路可以承载的
-
请注意,CPU 拥有的 PCI 通道数通常与内核数有关。这就是英特尔和 AMD 制造 CPU 的方式。因此,如果您想要最大的 node.js 性能,即使您只使用 1 个核心,获得 64 核 Threadripper 仍然是有意义的,因为您希望 PCI 通道用于 RAID 阵列中的高速磁盘 I/O
标签: node.js