成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

什么是 Event Loop?

開發 前端
Event Loop 是一個很重要的概念,指的是計算機系統的一種運行機制。JavaScript語言就采用這種機制,來解決單線程運行帶來的一些問題。

Event Loop 是一個很重要的概念,指的是計算機系統的一種運行機制。

JavaScript語言就采用這種機制,來解決單線程運行帶來的一些問題。

120131024105854

本文參考C. Aaron Cois的《Understanding The Node.js Event Loop》,解釋什么是Event Loop,以及它與JavaScript語言的單線程模型有何關系。

想要理解Event Loop,就要從程序的運行模式講起。運行以后的程序叫做“進程”(process),一般情況下,一個進程一次只能執行一個任務。

如果有很多任務需要執行,不外乎三種解決方法。

(1)排隊。因為一個進程一次只能執行一個任務,只好等前面的任務執行完了,再執行后面的任務。

(2)新建進程。使用fork命令,為每個任務新建一個進程。

(3)新建線程。因為進程太耗費資源,所以如今的程序往往允許一個進程包含多個線程,由線程去完成任務。(進程和線程的詳細解釋,請看這里。)

以JavaScript語言為例,它是一種單線程語言,所有任務都在一個線程上完成,即采用上面的***種方法。一旦遇到大量任務或者遇到一個耗時的任務,網頁就會出現”假死”,因為JavaScript停不下來,也就無法響應用戶的行為。

你也許會問,JavaScript為什么是單線程,難道不能實現為多線程嗎?

這跟歷史有關系。JavaScript從誕生起就是單線程。原因大概是不想讓瀏覽器變得太復雜,因為多線程需要共享資源、且有可能修改彼此的運行結 果,對于一種網頁腳本語言來說,這就太復雜了。后來就約定俗成,JavaScript為一種單線程語言。(Worker API可以實現多線程,但是JavaScript本身始終是單線程的。)

如果某個任務很耗時,比如涉及很多I/O(輸入/輸出)操作,那么線程的運行大概是下面的樣子。

220131024105922

上圖的綠色部分是程序的運行時間,紅色部分是等待時間??梢钥吹剑捎贗/O操作很慢,所以這個線程的大部分運行時間都在空等I/O操作的返回結果。這種運行方式稱為”同步模式”(synchronous I/O)或”堵塞模式”(blocking I/O)。

如果采用多線程,同時運行多個任務,那很可能就是下面這樣。

320131024105935

上圖表明,多線程不僅占用多倍的系統資源,也閑置多倍的資源,這顯然不合理。

Event Loop就是為了解決這個問題而提出的。Wikipedia這樣定義:

“Event Loop是一個程序結構,用于等待和發送消息和事件。(a programming construct that waits for and dispatches events or messages in a program.)”

簡單說,就是在程序中設置兩個線程:一個負責程序本身的運行,稱為”主線程”;另一個負責主線程與其他進程(主要是各種I/O操作)的通信,被稱為”Event Loop線程”(可以譯為”消息線程”)。

420131024105954

上圖主線程的綠色部分,還是表示運行時間,而橙色部分表示空閑時間。每當遇到I/O的時候,主線程就讓Event Loop線程去通知相應的I/O程序,然后接著往后運行,所以不存在紅色的等待時間。等到I/O程序完成操作,Event Loop線程再把結果返回主線程。主線程就調用事先設定的回調函數,完成整個任務。

可以看到,由于多出了橙色的空閑時間,所以主線程得以運行更多的任務,這就提高了效率。這種運行方式稱為”異步模式“(asynchronous I/O)或”非堵塞模式”(non-blocking mode)。

這正是JavaScript語言的運行方式。單線程模型雖然對JavaScript構成了很大的限制,但也因此使它具備了其他語言不具備的優勢。如 果部署得好,JavaScript程序是不會出現堵塞的,這就是為什么node.js平臺可以用很少的資源,應付大流量訪問的原因。

原文鏈接:http://www.ruanyifeng.com/blog/2013/10/event_loop.html

責任編輯:陳四芳 來源: ruanyifeng.com
相關推薦

2022-06-29 08:37:03

事件循環JS 語言

2019-10-11 09:00:00

JavaScriptEvent Loop前端

2021-04-27 08:31:06

event loopJavaScriptsetTimeout函

2023-04-28 15:20:37

JavaScript事件循環

2022-08-29 18:15:25

Node.js多線程模型

2022-10-17 13:35:23

EventJS工具

2017-09-14 13:48:20

Vue.js機制應用

2020-09-28 14:41:24

Event Loop

2017-09-12 09:50:08

JavaScriptEvent LoopVue.js

2022-05-04 10:22:39

Nodejs異步模式

2021-03-20 22:46:22

IaaSSaaSPaaS

2020-07-14 14:59:00

控制反轉依賴注入容器

2023-09-01 13:49:00

內存進程線程

2017-12-19 21:29:58

物聯網區塊鏈大數據

2011-07-04 14:50:49

QT Event 事件

2025-05-26 02:55:00

value安全開發

2020-11-20 10:51:03

云計算

2018-01-30 11:17:56

集群分布式SOA?

2023-09-14 15:00:31

2009-07-16 09:56:32

什么是iBATIS
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 四虎影院一区二区 | 日日干天天操 | 久久精彩视频 | 国产二区精品视频 | 欧美成人aaa级毛片在线视频 | 中文字幕乱码视频32 | 99久久国产综合精品麻豆 | 精品入口麻豆88视频 | 午夜国产一级 | 日本h片在线观看 | 亚洲入口| 成人二区 | 超碰97免费观看 | 国产午夜精品视频 | 久久99精品久久久久久 | 中文字幕日韩欧美 | 在线观看视频一区 | 日韩视频在线播放 | 国产乱码精品一品二品 | 国产精品视频网 | 久久国内精品 | 中文字幕四虎 | 日韩av在线免费 | www.亚洲一区| 精品视频久久久久久 | 婷婷久久网 | 在线精品一区二区三区 | 九九激情视频 | 51ⅴ精品国产91久久久久久 | 欧美激情综合五月色丁香小说 | 亚洲精品视频播放 | 精品一区二区三区免费毛片 | 日韩一区二区三区精品 | 精品国产乱码久久久久久牛牛 | 国产精品成人国产乱一区 | 欧美精品在线免费观看 | 精品一二区 | 国产a区 | 黄瓜av | 国产精品视屏 | 在线观看免费毛片 |