在节点js中,什么是libuv,并使用所有核心?

据我所知,所有IO请求和其他asynchronous任务都是由libuv中的nodejs完成的。 我想知道:使用线程是libuv吗? 如果是,是否使用所有可用的核心?

从这里 :

Node.js的单个实例在单个线程中运行。 为了利用多核系统,用户有时需要启动一个Node.js进程集群来处理负载。

群集模块允许轻松创build所有共享服务器端口的subprocess。

在某些情况下,多进程可能比multithreading更好。 有些人甚至认为这些人是邪恶的。 也许node.js被devise成比线程更好地利用进程。

首先,什么是livuv 。 正如文档中所提到的那样,这是一个多平台支持库,主要关注asynchronousI / O。

libuv不使用线程来执行asynchronous任务,但对于那些本质上不是asynchronous的。
作为一个例子,它不使用线程来处理套接字,它使用线程来使asynchronous的fs调用asynchronous。

当涉及到线程时, libuv 使用一个线程池,其大小可以在编译时使用UV_THREADPOOL_SIZEUV_THREADPOOL_SIZE
node.js提供了libuv的预编译版本,因此提供了一个固定的UV_THREADPOOL_SIZE参数。
不用说,这与芯片的内核数量无关。

我试图肯定,你可以放心地忽略这个话题,因为libuv ,因此node.js不会为了他们的目的而密集地使用线程(除非你以一种非常不正确的方式使用它们,或者如果你运行的是大量的libuv工作请求)。
如果大多数用户需要,可以随意运行每个核心的node.js实例。

libuv的devise概述部分在这一点上也很清楚:

I / O(或事件)循环是libuv的核心部分。 它为所有的I / O操作build立内容,并且意味着绑定到单个线程。 只要运行在不同的线程中,就可以运行多个事件循环。

Interesting Posts