Async.js - 并行真正平行吗?

tik*_*der 15 javascript parallel-processing asynchronous node.js async.js

据我所知到目前为止:Javascript是单线程的.如果您推迟执行某些过程,则只需安排它(将其排队)以在下次线程空闲时运行.但Async.js定义了两种方法:Async::parallel & Async::parallelLimit和我引用:

  • 并行(任务,[回调])

并行运行一系列函数,无需等到上一个函数完成.如果任何函数将错误传递给其回调...

  • parallelLimit(tasks,limit,[callback])

与并行相同,只有任务与任何时间执行的最大"限制"任务并行执行.

至于我对英语的理解,当你说:"并行完成任务"意味着同时进行 - 同时进行.

Async.js如何在一个线程中并行执行任务?我错过了什么.

Leo*_*tny 14

Async.js如何在一个线程中并行执行任务?我错过了什么.

parallel同时运行所有任务.因此,如果您的任务包含I/O调用(例如查询数据库),它们将看起来好像已经并行处理.

如何在单个线程中启用?!这是我无法理解的.

Node.js是非阻塞的.因此,它不是并行处理所有任务,而是从一个任务切换到另一个任务.因此,当第一个任务使I/O调用使其自身空闲时,Node.js只需切换到处理另一个.

I/O任务花费大部分处理时间等待I/O调用的结果.在像Java这样的阻塞语言中,这样的任务在等待结果时阻塞其线程.但是Node.js利用它来处理另一个任务而不是等待.

所以这意味着如果每个任务的内部处理是异步的,则线程被授予此任务的每个位,无论它们中的任何一个是否已经完成,直到所有任务完成它们的位?

是的,几乎就像你说的那样.Node.js开始处理第一个任务,直到它暂停进行I/O调用.在那一刻,Node.js离开它并将其主线程授予另一个任务.因此,您可以说该线程依次被授予每个活动任务.

  • 这对我来说很有用.我每个都使用async,但是,根据我的控制台日志,它没有重新排序任何东西(因为在一个事物中,在数组中以相同的顺序完成另一个事件).**没有真正的"平行".**只有一件事情会同时发生.只有当另一个人进入并等待暂停结束时,才会暂停.所以,简单地运行`console.log`并不足以阻止它.你可以说这是更好的时间管理,但我不会把它称为并行. (3认同)