引子
為了web app而看的nodejs,對于nodejs的單線程對高并發友好小小煙糾了下,分享,歡迎指正謬誤。。。
都說單線程nodejs能減少I/O問題,淘寶team說它是一個平臺而不是一種語言,它的單線程是指JS執行線程(其實就是主線程的意思),實際的I/O操作都是多線程執行的。(題外話)
那開始入正題。
簡單的說 Node.js 就是運行在服務端的 JavaScript。
Node.js 是一個基于Chrome JavaScript 運行時建立的一個平臺。
Node.js是一個事件驅動I/O服務端JavaScript環境,基于Google的V8引擎,V8引擎執行Javascript的速度非常快,性能非常好。
Node.js 是運行在服務端的 JavaScript,如果你熟悉Javascript,那么你將會很容易的學會Node.js。
我們假設現在有兩種餐廳的出餐模式:
apache模式,以下簡稱A模式。一共有三個點餐窗口,三位服務人員,三位廚師(請自行腦補畫面,但是別亂想)。顧客在任一窗口點餐[所謂多線程],點完后服務員傳達廚師,等待廚師出餐,服務員返給顧客[同步返回響應結果]。顧客本次購物結束。服務員進行下一位顧客的點餐[接收下一個請求]。
nodejs模式,以下簡稱N模式。一共只有一個點餐窗口一位服務員[單線程],一位廚師[CPU]。顧客在窗口點餐,點完后服務員傳達廚師,廚師進行出餐,而服務員不必等待[不必等待當前請求返回結果],直接進行下一位顧客的點餐,然后繼續傳達下一個顧客的訂單給廚師。廚師挨個完成后拋出給出餐窗口[異步返回響應結果],顧客到出餐窗口取餐,本次購物結束。
那么問題來了,假設餐廳做的是鹵味(配酒的那種你懂的),此時同時來了四個顧客。A模式下有三位顧客可三個窗口同時點餐,另一位需等待或者說顧客覺得滿載[無法接收請求]也下不了單直接走人去隔壁老王家了,廚師加熱2分鐘后出餐,平均每人等待2分鐘。N模式下必須排隊,但是可以無需等待,四位顧客都可先下單,第四位顧客的等待時間應該是八分鐘之內,然后到出餐窗口取。這種模式下不僅能避免A模式下因兩位顧客同時點了僅剩的一份雞爪而產生的廚師對資源處理[數據處理]的矛盾問題而且能解決同時多人來下單下不了單的問題[高并發]。
問題又來了,假設我做的是莆田鹵面生意,假設加工一份要10分鐘(豪華版),如果同時來三位顧客,那A模式下每位顧客10分鐘后可用餐,但是N模式下第三位要30分鐘后才能用餐,因為一位廚師忙不過來了,你下單了還是要等著,表示不餓死也饞死了。這大概就是為什么需要CPU大量計算的不適合使用nodejs的一個說法吧。
總結:node適合運用在高并發、io密集、少業務邏輯的場景。
應該說各有千秋吧,沒有最好的只有最適合的(請注意,話題開始跑偏)。。??~~
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2016.9.29?
學習參考地址:
http://taobaofed.org/blog/2015/10/29/deep-into-node-1/