如果我使用异步函数,或带有回调的函数(例如本机fs模块,http等),则默认情况下它们是否可以在所有CPU内核上运行?
还是整个事情只使用1个内核?
答案 0 :(得分:1)
node.js中的某些异步操作(例如fs
模块中的文件I / O)将通过libuv中的线程池在node.js进程中使用其他线程。这将取决于您的线程池的大小,操作的类型以及要使用多少个其他CPU的主机操作系统。在文件I / O上占用多个CPU的情况下,这并不一定有助于提高整体吞吐量,因为文件I / O上的所有CPU总是受到磁盘上读/写头位置的限制。
诸如网络之类的一些异步操作(如http
模块)本质上是非阻塞且异步的,并且不使用线程进行其网络连接或触发任何有意义的额外CPU使用。
由于Javascript本身全部在一个线程中执行,因此这些都不会在多个线程中运行您自己的Javascript。
要完全使用多个CPU,您可以: