Node.js 在NodeJS中,什么是libuv,它是否使用所有核心?
据我所知,所有IO请求和其他异步任务都是由Node.js 在NodeJS中,什么是libuv,它是否使用所有核心?,node.js,multithreading,core,libuv,Node.js,Multithreading,Core,Libuv,据我所知,所有IO请求和其他异步任务都是由nodejs中的libuv完成的。 我想知道libuv是否正在使用线程。如果是,它是否使用所有可用的内核?来自: Node.js的单个实例在单个线程中运行。接受 用户有时希望启动的多核系统的优势 Node.js进程集群用于处理负载 集群模块允许轻松创建所有子进程 共享服务器端口 在某些情况下,多进程可能比多线程更好。有些人甚至认为Thead是邪恶的。也许node.js的设计是为了更好地利用进程而不是线程。首先,什么是libuv。如中所述,它是一个多平台支
nodejs
中的libuv
完成的。
我想知道libuv
是否正在使用线程。如果是,它是否使用所有可用的内核?来自:
Node.js的单个实例在单个线程中运行。接受
用户有时希望启动的多核系统的优势
Node.js进程集群用于处理负载
集群模块允许轻松创建所有子进程
共享服务器端口
在某些情况下,多进程可能比多线程更好。有些人甚至认为Thead是邪恶的。也许node.js的设计是为了更好地利用进程而不是线程。首先,什么是
libuv
。如中所述,它是一个多平台支持库,重点关注异步I/O
libuv
不将线程用于异步任务,而是用于那些本质上不异步的任务。例如,它不使用线程处理套接字,而是使用线程使同步fs调用异步 当涉及线程时,
libuv
可以在编译时使用UV\u THREADPOOL\u size
更改的大小node.js
提供了一个预编译版本的libuv
,因此提供了一个固定的UV\u THREADPOOL\u SIZE
参数。不言而喻,这与芯片的内核数量无关 我想肯定的是,您可以安全地忽略这个主题,因为
libuv
,因此node.js
不会为了它们的目的大量使用线程(除非您以非常不正当的方式使用线程,或者运行大量libuv
工作请求)。如果您需要,可以像大多数用户一样为每个核心运行
node.js
关于这一点,libuv
的定义也非常清楚:
I/O(或事件)循环是libuv的核心部分。它为所有I/O操作建立了内容,并将其绑定到单个线程。只要每个事件循环在不同的线程中运行,就可以运行多个事件循环
libuv模块的职责与标准库中的某些特定函数相关。对于一些标准库函数调用,节点C++侧和LIBUV决定完全在事件循环之外进行昂贵的计算。它们会产生一个称为线程池的东西,即线程池是一系列四个线程,它们可以用于运行计算密集型任务,例如散列函数。 默认情况下,libuv在此线程池中创建四个线程。这意味着,除了用于事件循环的线程外,还有四个其他线程可用于卸载需要在应用程序内部进行的昂贵计算。节点标准库中包含的许多函数将自动使用此线程池
如果有太多的函数调用,它将使用所有内核。CPU内核实际上并没有加快处理函数调用的速度,它们只允许您正在执行的工作中存在一定程度的并发性。是的,libuv有一个线程池。如果系统是多核的,它是否使用所有内核?