NodeJS為什么支持高并發、非阻塞

nodejs是非阻塞異步操作。

特點

1、Chrome V8引擎

2、事件驅動

3、非阻塞 I/O

4、單線程

如何處理“高并發”請求?

針對每個并發請求,服務端給請求注冊一個激發事件(I/O),并給一個回調函數(這個過程沒有阻塞新的連接請求)。

按順序執行事件處理(I/O),處理完成后執行回調函數,接著執行下一個事件處理(I/O)。

事件處理(I/O)原理?

事件處理(即異步I/O處理)是由node工作線程去執行的(nodejs底層的libuv是由多線程的線程池并行I/O操作),且主線程是不需要等待返回的,只要發出指令后就可以執行其他事件,所有操作完成后執行回調。

NodeJS的優缺點

優點:

1、高并發;

2、適合I/O密集型應用。

缺點:

1、不適合CPU密集型應用,只支持單核CPU,不能充分利用CPU;

2、單進程,單線程,一旦代碼某處出現bug,整個系統都崩潰;

如何解決CPU密集型?

原因,由于JavaScript單線程的原因,如果有長時間運行的計算(比如大循環),將會導致CPU時間片不能釋放,使得后續I/O無法發起。

解決方案:分解大型運算任務為多個小任務,使得運算能夠適時釋放,不阻塞I/O調用的發起。

單進程、單線程解決方案

Nnigx反向代理,負載均衡,開多個進程,綁定多個端口;

開多個進程監聽同一個端口,使用cluster模塊。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容