gpt4 book ai didi

javascript - Javascript 是如何实现单线程的?

转载 作者:IT王子 更新时间:2023-10-29 03:08:41 24 4
gpt4 key购买 nike

我对 Javascript 的单线程特性有疑问。

console.log("1");
setTimeout(function(){console.log("2");},3000);
console.log("3");
setTimeout(function(){console.log("4");},1000);

这段代码的结果是1 3 4 2。如您所见,42 之后,这让我想知道在单线程环境中 2 不应该在 4 之后吗?如果不是,那么 JS 怎么知道第二个 setTimeout 应该在第一个之前完成?为了通知EventLoop,不应该有两个线程并发完成两个setTimeout吗?

最佳答案

JavaScript(在浏览器中)不会同时运行2

一次最多一个 setTimeout 回调可以执行——因为有一个 JavaScript 执行上下文或“线程”。

但是,要运行的“下一个预定超时”总是运行.. next。 “4”在“2”回调之前运行,因为它被安排得更早运行。超时从 有效地安排在同一时间(没有任何操作被阻塞),但“2”的间隔要长得多。

底层实现可能使用线程1 - 但同一全局上下文中的 JavaScript 不会并发运行并保证一致 和所有回调之间的原子 行为。


1 或者可能不会;这可以在 select/poll 实现中没有任何线程的情况下处理。

2 在相同的上下文中:即 Tab/Window、WebWorker、宿主浏览器控件。例如,虽然 WebWorker 是并发运行的,但它们在不同的上下文中运行并遵循相同的异步模型(例如,计时器使用的模型)。

关于javascript - Javascript 是如何实现单线程的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21718774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com