当前位置: 首页 > 面试题库 >

Async.js-并行实际上是并行的吗?

柏高洁
2023-03-14
问题内容

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

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

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

  • parallelLimit(任务,限制,[回调])

与并行执行相同,仅并行执行任务,任何时候最多执行“限制”任务。

就我对英语的理解而言,当您说:“并行执行任务”是指同时(同时)执行任务。

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


问题答案:

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

parallel同时运行所有任务。因此,如果您的任务包含I / O调用(例如查询数据库),则它们看起来就像是并行处理的一样。

如何在单个线程中启用它?那是我无法理解的。

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

I / O任务花费了大部分处理时间来等待I /
O调用的结果。在阻塞Java之类的语言中,此类任务在等待结果时会阻塞其线程。但是Node.js可以利用时间来处理其他任务,而不必等待。

因此,这意味着如果每个任务的内部处理都是异步的,则将线程授予该任务的每个位,而不管它们中的任何一个是否已完成直到所有位都已完成?

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



 类似资料:
  • 到目前为止,我的印象是,在同一时间启动的两个线程也是并行执行的(两个线程都在同一时间运行它们的代码段),但我最近阅读了一些文档,我了解到它们实际上轮流执行它们的代码,因此第一个线程的代码段与第二个线程的代码段在同一时间执行是不存在的。我的理解正确吗? 如果是,那么多线程执行比单线程执行快多少?我这么问是因为唯一的区别是单线程顺序执行代码,而多线程可以轮流执行,但仍然需要相同的时间,因为它不是并行执

  • 我创建了两个类来计算数字,其中一个类同步执行,另一个类将其分成两半,并在两个线程中执行这两半。(intel i5(4个CPU),8GB ram)代码如下: 公共类: 多线程执行:public class Sheet2{

  • 因为一次只能运行一条指令,并且假设CPU只运行这个进程。多线程难道不是线程之间快速的上下文切换,给人一种并行处理的错觉,但实际上并不是在处理吗? 那么,既然CPU要执行的指令数是一样的,不管是单线程还是多线程,完成的时间不应该是一样的吗?如果是,说明多线程是并行处理的一种方式不是错的吗?

  • 我使用这里描述的策略来运行独立空手道。jar和自定义jar(实现LogModifier): 这在我的本地机器上非常有效,但在AWS CodeBuild上运行时会看到奇怪的行为:测试报告为通过,但需要0秒,并且没有显示输出,这表明它们没有实际运行。 CodeBuild作业在openjdk11上的 /aws/codebuild/standard: 3.0映像上运行。 比较我当地的环境: 注意:我们之前

  • 从1.5版本开始建立起严格的版本更新记录。目前平均迭代时间为每半年一个大版本,每2-4周一个小版本。 查看历史版本的更新记录,请点击这里 建议使用的版本 稳定版:v1.10.5 预览版:v4.0.0 1.x/2.x分支已进入特性锁定期,不再开发新功能,仅修复BUG 2.x/4.x版本可通过设置enable-coroutine关闭协程特性,使其变为非协程版本 版本类型 alpha 特性预览版本,表

  • 我编写了两个功能文件,每个功能文件打开不同的浏览器URL,例如一个是open google。com和secnd一个开放的亚马逊。但事实并非如此。 两个浏览器都打开了谷歌。通用域名格式。此外,它不能与浏览器交互,任何编码到浏览器的操作都不会执行。此外,关闭第一个浏览器会导致第二个浏览器出现空指针异常。 cucumber版本6我从AbstractCucumberTesNG继承开始。然后我创建登录。功能