美文网首页
javascript-事件轮询Eventloop

javascript-事件轮询Eventloop

作者: 小麻烦爱学习 | 来源:发表于2020-07-04 22:54 被阅读0次

浏览器的EventLoop

js的“主线程”是单线程

是指UI渲染线程和js引擎共用同一个线程

进程

计算机调度任务时以进程为单位
浏览器是多进程的,每一个tab都是一个进程,
浏览器有一个主进程 控制用户的界面
每个tab页,都有一个渲染进程(浏览器内核)
处理请求的进程
绘图GPU进程
插件进程

线程包括4类

UI渲染线程
Js引擎(UI和js共享同一个线程,是互斥的)
事件线程click/定时器setTimeout/ajax
事件触发线程,调度以下线程:处理事件/定时器/ajax(Event loop)

异步方法分为2类:

  1. 宏任务:宿主环境提供的
    setTimeout/setInterval/setImmediate(IE/node)
    Event
    Ajax
    requestAnimationFrame
    I/O(Node)
  2. 微任务:语言标准提供的
    Promise.then
    MutationObserver
    Process.nextTick(Node)
    MessageChannel

JS执行顺序

1.script主代码块放入执行栈,从上到下顺序执行
2.遇到宏任务,加入宏任务队列(如果是setTimeout,则到时间后加入)
3.遇到微任务,加入微任务队列
4.主代码执行完毕后,清空微任务队列
5.执行UI渲染(并不是每次都渲染,和浏览器都优化机制有关)
6.从宏任务队列中拿出一个任务放入执行栈执行

(先欠一张图)
联系题

function func1(){
    console.log('func1 start');
    return new Promise(resole=>{
        resole('ok');
    })
}

function func2(){
    console.log('func2 start');
    return new Promise(resole=>{
        setTimeout(() => {
            resole('okk'); 
        }, 10);
    })
}
console.log(1);
setTimeout(async () => {
    console.log(2);
    await func1();
    console.log(3);
}, 20);
for(let i = 0; i < 90000000; i++);
console.log(4);

func1().then(rs => {
    console.log(5);
});
func2().then(rs => {
    console.log(6);
});

setTimeout(() => {
    console.log(7);
}, 0);

console.log(8);

答案

// 1
// 4
// func1 start
// func2 start
// 8
// 5
// 2
// func1 start
// 3
// 7
// 6

相关文章

  • javascript-事件轮询Eventloop

    浏览器的EventLoop js的“主线程”是单线程 是指UI渲染线程和js引擎共用同一个线程 进程 计算机调度...

  • 了解nodejs中的事件轮询(eventloop)

    很久以前翻译的,忘了出处(:з」∠) 首先需要知道的是,node.js的 I/O是异常昂贵的 所以一旦当前的编程技...

  • 回调函数

    浏览器的事件轮询 首先js是单线程的,js异步是浏览器事件轮询的结果。事件轮询的字面意思就是事件循环。事件轮询的步...

  • netty-event-loop

    EventLoop是netty中负责处理Channel的IO事件的对象。从名称可以得知eventLoop是事件循环...

  • 2020-09-12复习

    一、eventLoop setTimeout,ajax等异步和dom事件都是使用回调,基于eventLoop ...

  • javascript-事件基础和事件绑定

    javascript-事件基础和事件绑定 一、事件驱动 1.1事件 javascript侦测到的用户的操作(点击、...

  • 初识EventLoop

    EventLoop,也就是平时所说的事件循环,那什么是eventloop呢?这里大致介绍一下。 首先,JavaSc...

  • 面试题总结(一)

    1、什么是 EventLoop EventLoop是一种事件循环机制,可以用来解决javascript单线程运行不...

  • JavaScript之EventLoop事件循环

    EventLoop事件循环 参考链接Tasks, microtasks, queues and schedules...

  • 事件循环 & 继承 杂记

    事件循环 事件: 键盘事件, 其他东西触发的, 统称为事件 轮询: 操作系统通过轮询的方式, 每个一段时间就询问事...

网友评论

      本文标题:javascript-事件轮询Eventloop

      本文链接:https://www.haomeiwen.com/subject/ccopqktx.html