事件循环相信大家都不陌生,很多同学都知道事件循环是一个"死循环",今天我们看一下这个死循环到底是怎样的。我们先看一个朴素版的事件循环系统。
代码语言:javascript复制class EventSystem {
constructor() {
// 任务队列
this.queue = [];
}
// 追加任务
enQueue(func) {
this.queue.push(func);
}
// 事件循环
run() {
while(1) {
while(this.queue.length) {
const func = this.queue.shift();
func();
}
}
}
}
// 新建一个事件循环系统
const eventSystem = new EventSystem();
// 生产任务
eventSystem.enQueue(() => {
console.log('hi');
});
// 启动事件循环
eventSystem.run();
以上代码实现了一个非常朴素的事件循环系统
1 新建一个事件循环系统
2 生产任务
3 启动事件循环系统
但是我们发现当没有任务的时候,事件循环系统陷入了死循环,这无疑浪费了cpu。我们看一下执行以上代码的cpu的情况(我电脑4核,可以看到以上代码对应的进程几乎完全占据了一个cpu,1/4)。
接着我们优化一下这个朴素版的事件循环。