gpt4 book ai didi

asynchronous - 异步回调是如何实现的?

转载 作者:行者123 更新时间:2023-12-04 11:52:21 25 4
gpt4 key购买 nike

所有语言如何实现异步回调?

例如在 C++ 中,需要有一个“监控线程”来启动 std::async .如果在主线程中启动,则必须等待回调。

std::thread t{[]{std::async(callback_function).get();}}.detach();


std::async(callback_function).get(); //Main thread will have to wait

JavaScript 中的异步回调呢?在 JS 中大量使用回调...... V8 如何实现它们? V8 是否创建了很多线程来监听它们并在收到消息时执行回调?或者它是否使用一个线程来监听所有回调并保持刷新?

例如,
setInterval(function(){},1000);
setInterval(function(){},2000);

V8 是创建 2 个线程并监视每个回调状态,还是有一个池来监视所有回调?

最佳答案

V8 没有实现带有回调的异步函数(包括 setInterval)。引擎只是提供了一种执行 JavaScript 代码的方法。

作为 V8 嵌入者,您可以创建 setInterval JavaScript 函数链接到您想要的 native C++ 函数。例如,创建线程或安排一些作业。此时,您有责任在必要时调用提供的回调。一次只有一个线程可以使用 V8 引擎(V8 隔离实例)来执行代码。这意味着如果需要从另一个线程调用回调,则需要同步。 V8 提供的锁定机制正是你需要的。

解决这个问题的另一种更常见的方法是创建一个函数队列供 V8 执行,并使用无限队列处理循环在一个线程上执行代码。这基本上是一个事件循环。这样你就不需要使用执行锁,而是使用另一个线程将回调函数推送到队列中。

所以这取决于浏览器/Node.js/其他嵌入器如何实现它。

关于asynchronous - 异步回调是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23406584/

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