理解异步模块中的并发/并行性-Node JS



我有一个web服务器,上面运行着一个Node进程,由pm2管理,该web服务器有16个可用内核。

Node进程使用异步模块管理一个任务队列。在Node进程与其交互的服务之间断开连接的情况下,根据传入的事件数量,此任务队列可能会增长到10000多个。

在断开连接的情况下,队列将维护此任务列表,然后在重新建立连接时,执行排队的任务。

医生说。。。

添加到队列中的任务将并行处理(最多并发限制(。如果所有工作人员都在进行中,则任务将排队直到一个可用。一旦工人完成了一项任务调用任务的回调。

我的问题是。。。

  1. 如果队列中有10000个任务,并且我将并发级别设置为1,那么我认为这些任务基本上一次执行1个,这是对的吗?如果是这样的话,我想这意味着如果添加了新任务,这个队列可能永远不会完全耗尽?

  2. 如果我将并发值设置为16,那么它是否会利用每个CPU核心并行运行16个任务?或者并发性是由其他东西管理的?

  3. 任务是如何并行运行的?我的理解是,单个节点进程一次只能使用一个核心,因为它是单线程的。

  4. 我是不是完全错过了异步模块如何管理并行任务的要点?!

提前感谢你们这些聪明的家伙!

1(是的,它们将串行执行。如果不为任务设置超时,则可能永远不会耗尽队列。

2( 不。所有任务都将在节点应用程序运行的同一核心上执行。将任务分配给工作人员,您将获得多进程队列(查看子进程&ipc(

3( 如果任务是一个阻塞代码,那么就不会有任何并行的任务。但是,如果您向磁盘/网络写入,那么您正在进行异步工作,在等待答案的同时,引擎将继续使用的其余代码

4( 只是一点点。但你正在解决问题的路上。(

最新更新