關於Nodejs的單線程、異步IO與事件驅動的理解

       首先,nodejs如今越來越火,我記得有人做過實驗,用node和php來做了性能對比(都是做後臺的),答案是node是php性能的86倍!

       nodejs最大的特點就是單線程、異步IO、事件驅動。(單線程是因爲JS引擎中只有一個線程去解析和執行javascript代碼,即主線程

       從接觸編程之後,我遇到最震撼的也是最難學就是多線程編程,我在想只有多線程編程纔是真理,知道我接觸了node,我發現node是單線程的,但是它的性能又是那麼的好,這是怎麼回事呢,究竟node是如何實現異步的呢?

       上面說了node只有一個主線程,從上到下依次執行任務,但是node還有一些其他線程,比如處理AJAX請求的線程、處理DOM事件的線程、定時器線程、讀寫文件的線程等。這些線程稱爲工作線程。

       假如咱們開設了一家奶茶店,由於奶茶運用了獨門祕方,每天上門的客人非常多,但是由於咱們剛剛開業,缺少資金,所以只有一個售賣窗口。試想如果所有客人一擁而上,勢必會造成擁堵的。這時候,就需要引入一個機制:排隊機制。只有客人開始排隊之後,纔不會發生擁堵的現象。但是呢,新的問題又來了,其中有一個客人,到他買奶茶的時候,他發現自己的錢不知道裝在哪個口袋或者包裏了,他就翻來覆去的找,找了老半天,這是在後面的客人肯定不願意了,這就會在成新的問題。然後呢,解決辦法顯而易見,先讓這位找錢的客人去一邊找錢,等到他找到錢,在讓他重新回到隊伍中的第一個,這樣就解決了這個問題。

       node就相當於上面所說的奶茶店,因爲他是單線程,所以所有任務必須排隊依次進行,當遇到特殊任務時(比如文件操作),node就會把這個任務交給工作線程來處理,繼續解決下面比較好解決的任務,並且node會循環檢查這個特殊任務隊列,當這個特殊任務處理結束之後,node就會執行該任務對應的代碼(一般都是回調函數)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章