概述
Event Loop 是一種很重要的概念,指的是計(jì)算機(jī)系統(tǒng)的一種運(yùn)行機(jī)制。

Javascript是種單線程的機(jī)制。從而導(dǎo)致了一些問題,至于哪些這里就不做過多的研究。利用這種機(jī)制可以解決單線程多帶來的問題。
為什么會有Event loop?
想要理解Event Loop,就要從程序的運(yùn)行模式講起。運(yùn)行以后的程序叫做"進(jìn)程"(process),一般情況下,一個進(jìn)程一次只能執(zhí)行一個任務(wù)。
先來看看計(jì)算機(jī)對于多任務(wù)多線程的處理方式。
1.排隊(duì)
2.新建進(jìn)程
3.新建線程
JavaScript是一種單線程語言。所有的任務(wù)都在一個線程上完成,就是我們上面說的排隊(duì)。細(xì)想一下就是,一旦遇到一個耗時過大的任務(wù),就會形成堵塞的狀況。似乎一些都停滯不前,無法響應(yīng)用戶的行為。這樣的情況大概就是下面的這種情況:

上圖的綠色所代表程序所運(yùn)行的時間,而紅色所代表的是等待響應(yīng)的時間。可以看出很多的時間是消耗在了等待響應(yīng)上面了。
看看多線程的情況:

多線程看起來占用更多的資源,這顯然是很耗資源的。
出現(xiàn)了問題就會有個東西出來解決,Event loop 就是用來解決此等問題。
Event loop 就是一種程序運(yùn)行的結(jié)構(gòu),他實(shí)行兩條路線:一條是主干道,用來運(yùn)行實(shí)現(xiàn),可以叫他‘主線程’。他負(fù)責(zé)整個程序的運(yùn)行;另一條干道負(fù)責(zé)連接其他進(jìn)程與主進(jìn)程的通訊,這條干道就是我們要說的Event loop線程;
看看Event loop 跑起是什么樣子的:

。
上圖的綠色部分就所代表運(yùn)行時間,而橙色部分表示空閑時間。每當(dāng)遇到I/O的時候,主線程就讓Event Loop線程去通知相應(yīng)的I/O程序,然后接著往后運(yùn)行,所以不存在紅色的等待時間。等到I/O程序完成操作,Event Loop線程再把結(jié)果返回主線程。主線程就調(diào)用事先設(shè)定的回調(diào)函數(shù),完成整個任務(wù)。以這種方式大大的提高了效率。
JavaScript語言的運(yùn)行方式就是采取這方式,單線程雖說大大的限制了javascript,但是利用這種方式會大大提高了javascript的效率,只要程序安排的妥當(dāng)就不會出現(xiàn)那種堵塞的狀況。
參考文獻(xiàn):
阮一峰的網(wǎng)絡(luò)日志