猿问

关于浏览器事件循环具体实现?

网上有不少讲解浏览器事件循环机制的文章,主线程、任务队列、微任务、宏任务.....都说的大同小异! 单有一点还是不明白:浏览器具体是怎么实现的?

首先!如果有事件发生(不管是网络还是鼠标事件...)这个事件需要先添加到任务队列等待处理,那么问题来了,他是怎么把事件添加到队列的?或者是说浏览器是怎么知道有事件发生了? 
对于这点我的猜想是:也许所有异步的操作在有结果的时候都会调一个函数(不管是一个函数还是一个什么鬼,反正就是同一段代码),这段代码的作用就是通过各种计算最终把事件处理程序添加到任务队列去....

然后!浏览器是怎么执行循环机制的?我的猜想有两个:
1、也许是通过事件来触发循环检查队列的行为的,比如当有一个异步事件到来,浏览器除了会调用我上面说的那段代码放置事件处理程序之外,可能还会在放置后立马触发一次队列检查,如果有事件任务就立即取出执行,
2、这个就简单暴力了,也许浏览器另开一个线程,这个线程里埋了个定时器,就是setInterval一样,每隔1毫秒甚至0.5毫秒就去检查一下任务队列...! 但这样好像很浪费资源!


慕田峪7331174
浏览 449回答 1
1回答

四季花海

单线程只是说主线程是单线程,不是说没有别的任何线程,所以以我的理解,event loop的意思大概就是开个事件循环线程执行while(true)。
随时随地看视频慕课网APP
我要回答