国产探花免费观看_亚洲丰满少妇自慰呻吟_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事件驅動模型的全部內容,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 始兴县| 乌兰浩特市| 金堂县| 黄大仙区| 贵德县| 湾仔区| 静乐县| 桃园县| 临江市| 湟中县| 彭水| 蒙山县| 卓尼县| 综艺| 东乌珠穆沁旗| 永清县| 固原市| 西乌珠穆沁旗| 奉贤区| 乌海市| 金秀| 绵阳市| 婺源县| 娄烦县| 合山市| 洞口县| 正定县| 久治县| 喀喇沁旗| 兴义市| 固镇县| 晋中市| 增城市| 大关县| 屯门区| 邢台市| 平阳县| 绥棱县| 遂川县| 平阳县| 固阳县|