【问题标题】:Is javascript "truly parallel"?javascript“真正并行”吗?
【发布时间】:2018-01-23 19:19:49
【问题描述】:

两个异步函数可以同时执行吗?例如在下面的代码中,是否有可能执行第一个 setTimeout 中的命令 let xEquals2 = x === 2;,然后执行第二个 setTimeout 中的相同命令,最后执行第一个 setTimeout 中的 if 块。或者为了让问题更简单,下面的代码是否总是打印出数字 2 两次,或者它是否有可能打印出 2 和 3 或 3 和 3?

let x = 1;

setTimeout(() => {
    let xEquals2 = x === 2;
    if (!xEquals2) {
        x++;
    }
    console.log(x);
}, 1000);

setTimeout(() => {
    let xEquals2 = x === 2;
    if (!xEquals2) {
        x++;
    }
    console.log(x);
}, 1000);

【问题讨论】:

标签: javascript node.js asynchronous parallel-processing settimeout


【解决方案1】:

JavaScript 使用的事件循环与其他平台所拥有的线程不同。因此第一个回调将首先执行,然后是第二个,因此您的结果将是 2, 2。

【讨论】:

  • 这是否意味着一旦一个异步函数开始执行,它就不会被任何其他异步函数中断,直到它完成?
  • @TheOneWhoMade 对 javascript 来说不是这样。
  • @DanielA.White 我猜你的意思是结果是 2、2?我试过建议编辑,但它必须至少有 6 个字符:)
  • @marko 是的,我只是很难找到你的逻辑。
  • 请注意,JavaScript 是单线程的。重要的是不要混淆并发和异步。 Interleaved IO 提供 IO 并行性,因为 CPU 不会等待每个 IO 操作完成。对于 CPU 密集型工作,JavaScript 会将您限制为 1 个核心。
猜你喜欢
  • 2013-10-02
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多