setTimeout vs WebWorker vs XMLHttpRequest

问题描述 投票:2回答:1

我不确定这些概念,因此需要更清楚地理解这些概念。到目前为止,Java语言是单线程的,很好。

  1. 据我所知,setTimeout只是延迟了从主线程执行代码的时间,但是当调用堆栈为空时,回调仍在主线程上执行。它是否正确?对于承诺和事件处理程序也是如此。

    setTimeout(() => {
    console.log('this line of code is executed on the main thread');
    }, 5000);
    
  2. 对于使用XMLHttpRequest的异步请求,实际的请求被发送到由浏览器实现的单独的API,该浏览器在单独的线程上运行该请求,因此,它实际上是异步的。这是正确的吗?

  3. WebWorkers是浏览器实现的另一个API,该API还在后台线程中运行给定脚本中的代码。这是正确的吗?

非常感谢您回答这个问题!

javascript asynchronous xmlhttprequest settimeout web-worker
1个回答
0
投票

Set timeout(设置超时)和任何其他异步功能将在先决条件完成时排队等待执行。因此,当调用堆栈为空并且有工作要做时,JS会选择下一个排队的函数并执行它。这由所谓的javascript事件队列处理。

    与setTimeout没有太大的实际区别。这两个函数将在完成回调后将您的回调排队,而负责实现的代码是由实现定义的,因此浏览器可以选择如何处理多线程。
  1. 是的,worker在另一个线程中运行,并且具有自己的事件循环。如果它向主线程发送消息,则对该消息的回调将排队,以便在带有该消息的主线程中运行,反之亦然。请注意,据我所知,Web浏览器没有义务每个工人只有一个线程,但这绝对不会以任何方式影响您。
© www.soinside.com 2019 - 2024. All rights reserved.