Nodejs基礎(5-6)HTTP概念進階
1、什麽是回調? 是異步編程最基本的方法,對於nodejs來說需要按順序執行異步邏輯的時候一般采用後續傳遞的方式,也就是將後續邏輯封裝在回調函數中作為起始函數的參數逐層去嵌套。通過這種方式來讓程序按照我們期望的方式走完整個流程。
2、什麽是同步/異步?同步就是執行一個任務,後一個任務等待前一個任務執行完再執行。程序的執行順序和任務的排列順序是一致的。瀏覽器中的js是單線程的,是按順序執行的,雖然js文件可以並行下載,但是必須按順序執行。如果js中有死循環,那麽頁面就會阻止在這裏,後面的js也不會執行。
js中的異步函數:setTimeOut setInterval
1 var c = 0 23 function printIt () { 4 console.log(c) 5 } 6 function plus (callback) { 7 setTimeout(function () { 8 c+=1 9 callback() 10 },1000) 11 } 12 13 plus(printIt)
3、什麽是I/O?磁盤的寫入和讀出,數據的進和出。在nodejs中本質上是為數據庫和文件系統這些資源提供接口,向文件系統發送一個請求的時候不用等待硬盤,硬盤準備好的時候非阻塞接口會通知到node。
4、什麽是單線程/多線程? 單線程:程序是按順序執行的。一次只能談一個女朋友,分手後再談下一個。如果一個女朋友糾纏你,就會導致阻塞。
多線程:有管理和分配資源的難度。可以同時腳踏幾只船,但是要分配好資源。否則爭搶資源,自己也會崩潰。
5、什麽是阻塞/非阻塞?阻塞:如打電話預約,如果對方不回信,自己這裏就一直是掛起狀態。非阻塞:等不到回信,自己就先去玩,可以隔段時間打電話詢問。
6、什麽是事件?鼠標點擊,拖拽窗口等。
7、什麽是事件驅動?所有觸發的事件都是EventEmitter的實例。為某個事件註冊了回調函數,這個回調函數不是馬上執行,只有當這個事件發生的時候才會調用回調函數,這種函數執行的方式就叫事件驅動。這種回調就叫基於事件驅動的回調。如果這些回調和異步的IO操作有關,這個就可以看作是基於回調的異步IO,這種回調在nodejs中是有事件來驅動的。
8、什麽是基於事件驅動的回調?
9、什麽是事件循環Eventloop?倘若有大量的異步操作,以及IO的耗時操作甚至是定時器控制的延時操作,他們完成的時候都會調用相應的回調函數,從而來完成一些密集的任務而又不會阻塞整個程序執行的流程,這時這麽多事件就需要有一個機制來管理,這種機制就是事件循環。
Eventloop:是一個回調函數隊列。當異步函數執行的時候,回調函數就會被壓入到這個隊列,對於nodejs來說靠一個單線程不斷的查詢隊列中是否有事件,當他讀取到一個事件的時候將調用與這個事件關聯的js函數。事件的循環是先進先出的任務隊列。回調就按照他們被加入隊列的順序來執行。整個隊列可以理解成普通的函數和回調函數構成的完整的隊列。
Nodejs的核心思想:單線程非阻塞和事件驅動
Nodejs基礎(5-6)HTTP概念進階