01
23
41
42
请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师您好,想问下关于 v8 和 event loop 以及 web api 的关系

我理解 v8 是 js 的解释器,相当于说给 v8 输入一串符合 js 语法的字符串,然后它就能进行解释。对于输入的那串字符串可能后边会生成语法树或者中间代码之类的,如果在语法树或者中间代码中碰到类似 setTimetout,XHLHttpRequest dom 事件等不属于 v8 原生支持的方法,就把这些东西抛给对应的 定时器线程,IO线程 等,所以我想问下,对于 setTimeout 或者 nodejs 中的 nextTick 之类的这种不属于 v8 原生的东西,v8 是怎么知道要把对应的方法抛给对应的线程或者处理器的呢?或者说,浏览器这个环境或者 nodejs 这个环境,是怎么样让 v8 感知到 某个 Api 是我这个执行环境或者说宿主注入给你 v8 的?是 v8 引擎提供了什么用于拓展的接口么?
还有 event loop 的代码运行在哪里呢?我理解渲染进程里头有好多线程,比如 解析 js 的线程,处理 IO 的线程,处理定时器的线程,用 GPU 渲染页面的线程等,我觉得是否应该还有条线程用来运行 event loop 的代码,然后这条线程会不停地循环 js 解析线程的栈区,发现一旦 js 解析线程中的栈是空了就说明同步代码执行完,这个时候这条跑 eventloop 的线程就会去事件队列里头拿出 从别的线程发送过来的回调任务 出来执行?我不知道我这个理解是否是对的,所以请教老师一下。
然后还有,由于浏览器的 event loop 和 nodejs 的 event loop 还不一样,所以我理解 event loop 是不是也是 v8 引擎暴露给宿主环境的一个拓展接口?就比如 “我是 v8,我给你们宿主,提供了一个接口,你们按照我这个接口的规范,去在你们自己环境里头,去实现一个 event loop,你们的 event loop 要有什么什么样的 api 或者 什么什么样的功能,你们按照我的规范实现了这些功能的话,等我再解析 js 时候碰到什么微任务之类的,我就能发送给你们了,你们也能把宏任务或者微任务送到我这儿解析了”。不知道我这么理解对不对?
谢谢老师~

正在回答

插入代码

1回答

一次性提问太多,这样我不方便解答,你也不方便再次回复。

所以,我建议你重新提交问题,每次只提一个问题,我们搞定之后再说下一个问题。


你想一次性、短时间搞懂所有问题,这不太现实。

一步一步来。

0 回复 有任何疑惑可以回复我~
  • 提问者 Osuribaba #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-12-25 19:33:15
  • 提问者 Osuribaba #2
    好的,我已经分成三个问题了,麻烦老师看一下
    回复 有任何疑惑可以回复我~ 2020-12-25 19:33:33
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号