快速学习nodejs系列:六、nodejs特性3--事件驱动
事件驅動
上一節中,我們提到異步I/O;當I/O處理完畢后,nodejs是怎樣知道I/O已經完成了呢?又是怎樣去處理的呢?答案是:事件驅動(事件循環)機制。
事件驅動:
在nodejs中,當某個I/O執行完畢后,會以事件的形式通知執行I/O操作的線程;而線程去執行對應事件的回調函數。為了處理異步I/O,nodejs線程必須要有事件循環,不斷的檢查有沒有事件要處理,并依次處理。
對于nodejs來說,不論是建立新的請求、提交、獲取數據等,一切的行為都會觸發相應的事件。在同一個時刻,只能執行一個事件的回調函數,但是在執行事件回調的途中,是可以去處理其他事件的(如有新連接),然后返回繼續執行原事件函數,這樣的處理機制,我們稱為事件循環機制。其實在nodejs底層中,有一半的c++代碼,都是在處理事件隊列、回調函數。
好的,到這里我們已經學完了nodejs的3個特性!我們來做個總結:
nodejs的特性有3個:單線程、non-blocking I/O(非阻塞I/O)、event-driven(事件驅動);其實這3個特性都是在說同一件事。我們可以這樣理解:nodejs使用的是單線程,如果多個任務(I/O)同時過來了,某個I/O是阻塞的話,那其他任務都會在等,這樣性能就不會高了;這時就要異步I/O了,所有的I/O操作都要異步;這樣異步I/O就好了嗎?還沒完,如果正在執行A任務,這時B的I/O回調了,怎么辦?這就要事件循環了,不管是新用戶連接,還是老用戶I/O完成,都以事件的形式加入事件循環中,等待nodejs調度。(nodejs可以想象成是一個非常非常摳門的老板,只請一個服務員做所有的事情,但工作效率比請多個人還要高)
總結
以上是生活随笔為你收集整理的快速学习nodejs系列:六、nodejs特性3--事件驱动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XAPIAN简单介绍(三)
- 下一篇: Java_异常_05_ OutOfMem