美文网首页
前端面试题

前端面试题

作者: Wxq_59f9 | 来源:发表于2019-12-09 11:49 被阅读0次

    @1: 微任务和宏任务

    什么是宏任务、微任务

    先来了通俗易懂的例子:
    去银行办理业务的人就是一个个宏任务,当宏任务P1在柜台办理业务时,其它任务都需等待,当一个宏任务P1办理业务结束时,柜台职员会询问他还有没有其它微任务,如果他还有其他业务,则其他宏任务都需等待。就是微任务是在宏任务之前执行。

    宏任务、微任务有哪些

    宏任务包括:script(整体代码), setTimeout, setInterval, setImmediate, I/O, UI rendering。

    微任务包括: Promises, Object.observe, MutationObserver

    宏任务、微任务的执行顺序

    执行顺序:先执行同步代码,遇到异步宏任务则将异步宏任务放入宏任务队列中,遇到异步微任务则将异步微任务放入微任务队列中,当所有同步代码执行完毕后,再将异步微任务从队列中调入主线程执行,微任务执行完毕后再将异步宏任务从队列中调入主线程执行,一直循环直至所有任务执行完毕。

    例子

    setTimeout(function(){
        console.log('1');
    });
    new Promise(function(resolve){          
        console.log('2');
        resolve();
    }).then(function(){         
        console.log('3');
    });         
    console.log('4');
    
    解析:
    遇到setTimout,异步宏任务,放入宏任务队列中;
    遇到new Promise,new Promise在实例化的过程中所执行的代码都是同步进行的,所以输出2;
    而Promise.then中注册的回调才是异步执行的,将其放入微任务队列中
    遇到同步任务console.log(‘4’);输出4;主线程中同步任务执行完
    从微任务队列中取出任务到主线程中,输出3,微任务队列为空
    从宏任务队列中取出任务到主线程中,输出1,宏任务队列为空,结束~
    控制台测试一下,输出2 4 3 1;符合预期
    

    @2:EventLoop

    1:EventLoopGroup 是一组 EventLoop 的抽象,Netty 为了更好的利用多核 CPU 资源,一般会有多个 EventLoop 同时工作,每个 EventLoop 维护着一个 Selector 实例。

    2:EventLoopGroup 提供 next 接口,可以从组里面按照一定规则获取其中一个 EventLoop来处理任务。在 Netty 服务器端编程中,我们一般都需要提供两个 EventLoopGroup,例如:BossEventLoopGroup 和 WorkerEventLoopGroup。

    3: 通常一个服务端口即一个 ServerSocketChannel对应一个Selector 和一个EventLoop线程。BossEventLoop 负责接收客户端的连接并将 SocketChannel 交给 WorkerEventLoopGroup 来进行 IO 处理,如下图所示


    image

    约定俗成的关系(非常重要):

    1一个EventLoopGroup包含一个或多个EventLoop
    2一个EventLoop在其生命周期内只能和一个Thread绑定
    3所有I/O操作和事件都分配给EventLoop绑定的Thread处理
    4一个Channel在其生命周期内,只能注册于一个EventLoop
    5一个EventLoop可能被分配处理多个Channel。也就是EventLoop与Channel是1:n的关系
    6一个Channel上的所有ChannelHandler的事件由绑定的EventLoop中的I/O线程处理
    7不要阻塞Channel的I/O线程,可能会影响该EventLoop中其他Channel事件处理
    8EventLoop接口中只定义一个方法: parent() ----- 用于返回当前EventLoop实现的实例所属的EventLoopGroup的引用

    相关文章

      网友评论

          本文标题:前端面试题

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