gpt4 book ai didi

JavaScript:异步函数是否创建新线程?

转载 作者:行者123 更新时间:2023-12-05 00:27:32 24 4
gpt4 key购买 nike

Mozilla 关于 XMLHttpRequest 的文档在 async 上包括以下内容范围:

Note: Synchronous requests on the main thread can be easily disruptive to the user experience and should be avoided; in fact, many browsers have deprecated synchronous XHR support on the main thread entirely.



这是有道理的,因为你不需要让主线程等待一段不确定的时间。

如果我创建一个 async包含 usng XMLHttpRequest 的函数,这是否有资格作为一个新线程?

我知道 fetch() ,我知道 promises,我知道使用 XMLHttpRequest带有回调。这个问题是关于 async关键词。

最佳答案

JavaScript(在浏览器中)完全是单线程的(WebWorkers 除外)。术语“异步”不一定与多线程有关。

网络获取可能发生在以更高性能语言(c++、rust 等)的浏览器“网络”线程上,但这对 JavaScript 没有任何意义。

JavaScript 术语中的同步意味着处理实际网络请求的 c++ 代码将暂停 JavaScript 事件循环,直到请求完成。这意味着在请求完成之前,JavaScript 上下文中绝对不会发生任何事情。

因此,异步意味着您可以在单个 JavaScript 线程上做其他事情,而网络获取发生在后台。这可以通过 c++ 调用 JavaScript 回调或解析 JavaScript Promise(又名 async/await)来实现。

我将尝试用伪代码更清楚地阐述:

const response = makeRequest({ asyncMode: false });
//nothing can happen until this request finishes
//requestAnimationFrame animation code or click event listeners will not run
// until the request is finished

makeRequest({ asyncMode: true, callback: function(response, error){ console.log("this will execute later once the network request is made") } });
console.log("this code will run right away");
//requestAnimationFrame animation code or click event listeners will run as normal
// during the request

关于JavaScript:异步函数是否创建新线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61133976/

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