由Node.js事件驱动模型引发的思考
引言
近段時間聽說了Node.js,很多文章表述這個事件驅動模型多么多么優秀,應用在服務器開發中有很大的優勢,本身對此十分感性去,決定深入了解一下,由此也引發了一些對程序設計的思考,記錄下來。
什么是Node.js
Node.js在官網上是這樣定義的:“一個搭建在Chrome JavaScript運行時上的平臺,用于構建高速、可伸縮的網絡程序。Node.js采用的事件驅動、非阻塞I/O模型使它既輕量又高效,是構建運行在分布式設備上的數據密集型實時程序的完美選擇。”
Node.js的事件驅動
簡單來說就是只有一個線程,所有IO操作(網絡,文件訪問等)都是異步的,通過回調來響應處理。
Node.js做了什么
Node.js將網絡,文件,數據庫等操作等都實現了異步接口,讓開發者所設計的程序只跑在一個線程上,易于設計出性能良好的高并發網絡程序。
如果不采用異步的方式來實現,可能的處理方式有針對每一個連接建立一個線程處理,有多少個連接就建立多少個線程,每一個線程獨立不互相干擾。乍一看這么處理是沒有問題的,但是要知道線程的創建是有代價的,如果按照這么處理在連接數上萬,就已經很難處理過來的,創建線程浪費了大量資源。
Node.js的劣勢
從前文的描述中可以看出Node.js的事件驅動機制在IO密集型應用中,是有比較大的優勢的,那么考慮另外一種場景,CPU密集型應用(如數據加密,壓縮)。由于Node.js的代碼是在一個線程中運行的,這種情況下事件循環就被阻塞住了。當然Node.js也提供了一下其他機制(nextTick,child_process等)解決這種場景,但是看起來這些實現可以說是比較丑陋的。
關于程序設計的思考
感覺Node.js的設計在IO密集型應用上有優勢是值得在程序設計中參考借鑒的,如果在支持多線程的語言中采用如下設計是不是既擁有事件驅動的優勢又避免了在CPU密集型場景下的劣勢呢?
整體業務邏輯基于事件驅動的處理,可以避免許多多線程操作中繁瑣、易錯的地方。
CPU密集高運算的場景使用線程處理,主線程回調處理結果。
最后
對Node.js也只是簡單的了解一下,并未深入學習,有什么錯漏大家勿噴。
來自為知筆記(Wiz)
轉載于:https://www.cnblogs.com/vitoz/p/4872799.html
總結
以上是生活随笔為你收集整理的由Node.js事件驱动模型引发的思考的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦幻西游定心套问价
- 下一篇: sqlserver trigger