Node.js采用 事件驅動 和 異步I/O 的方式,實現(xiàn)了一個單線程、高并發(fā)的運行時環(huán)境,而單線程就意味著同一時間只能做一件事,那么Node.js如何利用單線程來實現(xiàn)高并發(fā)和異步I/O?本文將圍繞這個問題來探討Node.js的單線程模型:
1、高并發(fā)
一般來說,高并發(fā)的解決方案就是多線程模型,服務器為每個客戶端請求分配一個線程,使用同步I/O,系統(tǒng)通過線程切換來彌補同步I/O調用的時間開銷,比如Apache就是這種策略,由于I/O一般都是耗時操作,因此這種策略很難實現(xiàn)高性能,但非常簡單,可以實現(xiàn)復雜的交互邏輯。
而事實上,大多數(shù)網(wǎng)站的服務器端都不會做太多的計算,它們只是接收請求,交給其它服務(比如從數(shù)據(jù)庫讀取數(shù)據(jù)),然后等著結果返回再發(fā)給客戶端。因此,Node.js針對這一事實采用了單線程模型來處理,它不會為每個接入請求分配一個線程,而是用一個主線程處理所有的請求,然后對I/O操作進行異步處理,避開了創(chuàng)建、銷毀線程以及在線程間切換所需的開銷和復雜性。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結合數(shù)據(jù)結構來看看(二) 2017-07-26