国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

快速掌握Node.js事件驅動模型

2019-11-20 10:21:53
字體:
來源:轉載
供稿:網友

一、傳統線程網絡模型

在了解Node.js事件驅動模型之前,我們先了解一下傳統的線程網絡模型,請求進入web服務器(IIS、Apache)之后,會在線程池中分配一個線程來線性同步完成請求處理,直到請求處理完成并發出響應,結束之后線程池回收。

這就會就會帶來以下幾個問題 :

1.由于線程池中線程個數有限,對于頻繁請求時,就會出現等待,嚴重的甚至會把服務器掛掉

2.對于高并發的時候,為了防止出現臟數據就會使用鎖來解決,一些I/O事務可能消耗很長得時間,這樣就會出現一些線程等待,效率低下

二、事件驅動模型

1.在Node.js中有一個事件隊列,每個任務都會放入事件隊列中,都會留下處理結果的回調函數,事件循環線程(個人感覺有點類似ios中的RunLoop)處理事件隊列中的任務,直到回調函數不再存在。

2. 在無阻塞的情況下,作為一個帶有回調的函數被放入事件隊列中,事件循環線程中被提取并執行。

3.當執行過程中遇到I/O阻塞(讀取文件、查詢數據庫、請求套接字、訪問遠程服務等)時,事件循環線程不會停下等待結果,轉而繼續執行隊列中的下一個任務,不會在事件循環線程中執行。在函數執行時,Node.js在事件隊列中放置回調函數,它的順序根據函數的完成快慢決定。

4.在1中也說了當遇到I/O阻塞,循環線程不會等待結果,轉而執行隊列中的下一個任務,那是該由誰來執行這個I/O操作呢?

Node.js使用事件回調來避免對阻塞I/O的等待,在后臺實現線程池,當遇到I/O阻塞任務時,會從線程池中獲取一個線程,將該函數及回調在那里執行,在被阻塞的線程上執行的回調函數仍然可以把事件添加到事件隊列中。

以上就是關于Node.js事件驅動模型的全部內容,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 澄城县| 吉木乃县| 南岸区| 铅山县| 邓州市| 仪陇县| 大同县| 河间市| 讷河市| 卢龙县| 来凤县| 云南省| 邯郸市| 鹤壁市| 盐亭县| 东安县| 瑞金市| 尤溪县| 杭州市| 鲜城| 遵义市| 克什克腾旗| 伊金霍洛旗| 桐乡市| 陈巴尔虎旗| 全椒县| 班玛县| 红安县| 若尔盖县| 酒泉市| 翼城县| 珲春市| 新沂市| 沭阳县| 闵行区| 河北省| 新安县| 永胜县| 滦平县| 杭锦旗| 都昌县|