gpt4 book ai didi

javascript - Javascript 中的事件循环是否在单独的线程中执行?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:33:11 25 4
gpt4 key购买 nike

我仍然相信 Javascript 是单线程的,但是当我想到事件处理机制时,我有些怀疑。

  • event loop是不是一个单独的线程,从中一个一个的拉取事件排队和处理。

为什么我会这样认为,即使在处理队列中的一个事件时,它也可以监听或将事件推送到同一队列。我创建了一个示例如下:

<html>
<head>
<script>
function clicked(){
alert("clicked in between..");
}
function longRun(){
for(var i=0;i<50000;i++){
console.log(i);
}
alert("completed .... ");
}

</script>
</head>
<body>
<input type="button" value="quick!" onclick="clicked();"/>
<input type="button" value="long run!" onclick="longRun();"/>
</body>
</html>

当我点击long run!时,它需要一些时间才能完成,但同时如果我点击quick!,它将被添加到事件队列中并将在长期事件后立即执行。

实际发生了什么?谁能解释/纠正我

最佳答案

除了 webWorkers(我们这里不讨论),浏览器中的每个窗口只有一个“用户线程”。这意味着只有一个线程在运行您的用户 Javascript。

这并不意味着幕后的浏览器引擎没有一些其他线程来处理非 Javascript 处理。事实上,这种情况很有可能发生。但是,由于这些其他可能的线程从未实际运行任何 Javascript 或影响任何 Javascript 变量,因此它们不会直接影响 JS 执行环境。

是的,这些其他线程确实可以将东西插入 JS 事件队列中,稍后当主 JS 线程准备好处理下一个事件时,这些东西将被拾取。

查看此答案 How does JavaScript handle AJAX responses in the background?获取更多信息和相关文章列表。

关于javascript - Javascript 中的事件循环是否在单独的线程中执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31956007/

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