如何在JavaScript引擎中实现回调? (与如何使用回调无关)

时间:2019-05-01 18:22:50

标签: javascript v8

我知道这是什么以及如何在JavaScript中使用回调。我的问题是javascript引擎如何V8,实现回调?回调机制在异步事件处理中随处可见,例如事件回调,数据库查询。

是不是真的循环了?或其他某种形式,例如使用select.epoll()?

如果JavaScript应用程序中有1万个回调,这会减慢整个过程吗?

1 个答案:

答案 0 :(得分:1)

基本上,您的JavaScript代码会被编译成一个名为http://localhost:3000/api/files/download/some%20file的数据结构,该数据结构可以为Function,并存储在called中。

V8不一定管理回调的调用或管理循环,而是确保其结构的所有执行都发生在同一线程中,然后依靠底层引擎来管理在后台线程和事件循环中完成的工作,并且调用回调。

例如,nodejs使用runtime function table作为其底层运行时功能,包括libuv来管理主线程中的uv_loop_t

在调用诸如the actual event looping之类的函数时,它将最终分派到一个libuv函数中,该函数会在后台线程中进行工作,然后最终会管理与将工作推回后台程序相关的线程。主事件循环。

本质上,主事件循环是一个fs.readFile循环,它从队列中读取这些响应,并且只要有后台线程保持活动状态就可以继续。

浏览器的工作方式非常相似,但是每个人都有自己的相同概念的实现。