消息队列
浏览器页面是由消息队列和事件循环系统来驱动的。
如果有一些确定好的任务,可以使用一个单线程来按照顺序处理这些任务,这是第一版线程模型。
要在线程执行过程中接收并处理新的任务,就需要引入循环语句和事件系统,这是第二版线程模型。
如果要接收其他线程发送过来的任务,就需要引入消息队列,这是第三版线程模型。
如果其他进程想要发送任务给页面主线程,那么先通过 IPC 把任务发送给渲染进程的 IO 线程,IO 线程再把任务发送给页面主线程。
消息队列机制并不是太灵活,为了适应效率和实时性,引入了微任务。
基于消息队列的设计是目前使用最广的消息架构,无论是安卓还是 Chrome 都采用了类似的任务机制
事件循环
setTimeout 和 XMLHttpRequest 这两个 WebAPI 来介绍事件循环的应用
function showName(){
console.log("极客时间")
}
var timerID = setTimeout(showName,200);
通过 setTimeout 指定在 200 毫秒之后调用 showName 函数,并输出“极客时间”四个字。