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

首頁 > 編程 > JavaScript > 正文

詳解node單線程實現高并發原理與node異步I/O

2019-11-19 15:21:01
字體:
來源:轉載
供稿:網友

一、node單線程實現高并發原理

眾所周知nodejs是單線程且支持高并發的腳本語言。可為什么單線程的nodejs可以支持高并發呢?很多人都不明白其原理,下面我來談談我的理解:

1. node的優點:I/O密集型處理是node的強項,因為node的I/O請求都是異步的(如:sql查詢請求、文件流操作操作請求、http請求...)

a. 什么是異步?

異步:發出操作指令,然后就可以去做別的事情了,所有操作完成后再執行回調

異步的實現原理: 

// 第一步:定義變量let a = 1;// 第二步:發出指令,然后把回調函數加入異步隊列(回調函數并沒有執行)setTimeout(() => { console.log(a);}, 0)// 第三步:賦值,回調函數沒有執行a = 2;// 第四步:發出指令,然后把回調函數加入異步隊列(回調函數并沒有執行)setTimeout(() => { console.log(a);}, 0)// 第五步:賦值,回調函數沒有執行a = 3;// 當所有代碼執行完畢,cpu空閑下來了,就會開始執行異步隊列里面的回調函數// 所以最后控制臺輸出:3 3

b. 什么是異步I/O?

異步I/O顧名思義就是異步的發出I/O請求

c. 雖然nodejs可以異步的發出I/O請求,但nodejs不支持多線程,為啥就可以支持高并發呢?

因為nodejs的I/O操作,底層是開啟了多線程的

當同時有多個IO請求時,主線程會創建多個eio線程,以提高IO請求的處理速度    

額外知識點:

d. 雖然nodejs的I/O操作開啟了多線程,但是所有線程都是基于主線程開啟的只能跑在一個進程當中還是不能充分利用cpu資源

pm2進程管理器可以解決這個問題

pm2 是一個帶有負載均衡功能的Node應用的進程管理器.

e. cpu核數與線程之間的關系

在過去單CPU時代,單任務在一個時間點只能執行單一程序。之后發展到多任務階段,計算機能在同一時間點并行執行多任務或多進程。雖然并不是真正意義上的“同一時間點”,而是多個任務或進程共享一個CPU,并交由操作系統來完成多任務間對CPU的運行切換,以使得每個任務都有機會獲得一定的時間片運行。而現在多核CPU的情況下,同一時間點可以執行多個任務,具體到這個任務在CPU哪個核上運行,這個就跟操作系統和CPU本身的設計相關了

2. node的缺點:不擅長cpu密集型的操作

a. 什么是cpu密集型操作(復雜的運算、圖片的操作)

// 這就是一個cpu密集型的操作for (let i = 0; i < 1000000; i++) { console.log(i);}

b. nodejs為什么不擅長cpu密集型操作

因為nodejs是單線程的

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 许昌市| 抚顺县| 年辖:市辖区| 黄平县| 金秀| 库车县| 庆元县| 喀喇| 荥阳市| 横山县| 邮箱| 四平市| 睢宁县| 颍上县| 保德县| 河间市| 读书| 福贡县| 禹州市| 大名县| 峨边| 永靖县| 赤峰市| 揭阳市| 陇南市| 双江| 玉田县| 四会市| 抚顺县| 赣榆县| 绍兴县| 米脂县| 思茅市| 泰顺县| 抚州市| 永清县| 嘉鱼县| 葵青区| 平原县| 靖远县| 隆化县|