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

时间:2018-11-15 19:41:03

标签: javascript node.js concurrency async.js

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

Node进程利用异步模块管理任务队列。如果Node进程与其交互的服务断开连接,则根据进入的事件数量,此任务队列可能会增加到10,000多个。

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

医生这样说...

  

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

我的问题是这些...

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

  2. 如果我将并发值设置为16,它是否会利用每个CPU内核并行运行16个任务?还是由其他东西来管理并发?

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

  4. 我完全不知道异步模块如何管理并行任务吗?

预先感谢您的聪明提示!

1 个答案:

答案 0 :(得分:2)

1)是,它们将按顺序执行。 如果您没有为任务设置超时,则可能永远不会耗尽队列。

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

3)如果任务是阻塞代码,则不会并行执行任何操作。 但是,如果您写入磁盘/网络,则意味着正在进行异步工作,并且在等待答案的同时,引擎将继续执行其余代码

4)一点点。但是,您正在钉牢它。 ;)