Node的特點
異步I/O
在Node中,絕大多數的操作都是以異步的方式進行調用,我們可以從語言層面很自然的進行并行I/O操作,每個調用之間無須等待之前的I/O調用結束
事件與回調函數
Node將前端瀏覽器中應用廣泛且成熟的事件引入后端,配合異步I/O,將事件點暴露給業務邏輯
事件的編程方式具有輕量級、松耦合、只關注事務點等優勢
單線程
- 不用像多線程編程那樣處處在意狀態的同步問題
- 沒有死鎖的存在
- 沒有線程上下文交換所帶來的性能上的開銷
同時存在一些缺點
- 無法利用多核CPU(子進程可以應對這個問題)
- 錯誤會引起整個應用退出,應用的健壯性值得考驗
- 大量計算占用CPU導致無法繼續調用異步I/O
跨平臺
Node基于libuv實現平臺
Node的應用場景
I/O密集型
Node面向網絡且擅長并行I/O,能夠有效地組織起更多的硬件資源,從而提供更好的服務
I/O密集的優勢主要在于Node利用事件循環的處理能力
CPU密集型
關于CPU密集型應用,Node的異步I/O已經解決了在單線程上CPU與I/O之間阻塞無法重疊利用的問題,I/O阻塞造成的性能浪費遠比CPU的影響少。
Node可以通過編寫C/C++擴展的方式更高效地利用CPU
Node還可以將一部分Node進程當作常駐服務進程用于計算,然后利用進程間的消息來傳遞結果,將計算與I/O分離,充分利用多CPU
CPU密集不可怕,如何合理調度是技巧。
分布式應用
詳情連接阿里巴巴的數據平臺對Node的分布式應用