模拟eventloop demo

  Node的异步非阻塞I/O特性依赖于其内部的事件循环机制;
  下面简单模拟一下事件循环的实现:

const eventloop = {
    queue : [],
    loop(){
        while(this.queue.length > 0){
            var callback = this.queue.shift();
            callback();
        }
        setTimeout(this.loop.bind(this),50);   //这里this指的是eventloop对象
    },
    add(callback){
        this.queue.push(callback);
    }
}

eventloop.loop();

setTimeout(() => {
    eventloop.add(function(){
        console.log(1)
    })
},500)

setTimeout(() => {
    eventloop.add(function(){
        console.log(2)
    })
},800)

  这里间隔500毫秒和800毫秒向循环里添加了两个事件,eventloop会不间断得去监听是否有新事件进入执行栈。

事件循环:
每次循环过程称为Tick(即查看是否有但出来事件,将待处理事件存储在任务队列中),若有,则取出事件及回调函数放入stack由主线程执行。

任务队列:
异步操作将相关回调添加到Task Queue中,异步操作由浏览器内核webcore执行。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!