linux事件循环机制eventloop,理解EventLoop(事件循环)

  • Post author:
  • Post category:linux


EventLoop是什么?

EventLoop是一个执行模型,在不同的地方有不同的实现。浏览器和NodeJs基于不同的技术实现了各自的EventLoop。

JS是单线程语言,JS的Event Loop是JS的执行机制。深入了解JS的执行,就等于深入了解JS里的event loop。

浏览器的Event Loop是在html5的规范中明确定义。

NodeJS的Event Loop是基于libuv实现的。可以参考Node的官方文档以及libuv的官方文档。

libuv已经对Event Loop做出了实现,而HTML5规范中只是定义了浏览器中Event Loop的模型,具体的实现留给了浏览器厂商。

JS中的EventLoop

(1)JS为什么是单线程的?

因为JS最初是被设计用在浏览器中,如果JS是多线程的,比如说:有两个线程process1和process2,由于是多线程的JS,两个线程同时对一个dom进行操作,process1删除了该dom,而process2修改了该dom,此时浏览器就没法执行了。所以说JS是单线程的。

(2)JS中为什么需要异步呢?

因为JS中代码自上而下执行,如果不存在异步,当一行代码执行的时间过长时,后边的代码就会被阻塞,对于用户而言,意味着页面卡死,体验极其不好。

(3)JS中如何实现异步的呢?

通过事件循环(EventLoop),理解了EventLoop机制,就理解了JS的执行机制。

(4)JS中的EventLoop

举个栗子1:观察下面代码的执行顺序

conso