node特點及事件循環以及同步異步阻塞非阻塞

1.node服務器的特點單線程,非阻塞IO(打比方服務員點餐,點了餐以後他不會一直等着你的餐上來才走,他又去給其它人點餐),節約內存,節約上下文時間,沒有多個線程請求資源的問題。

2.webworker是多線程的,它受主線程的控制(相當於主線程僱傭的小弟),它不能操作DOM,所以它改變不了javascript是單線程的本質

3.事件循環先執行棧裏面的內容,遇到回調或者setTimeout放入回調隊列,nextick是把回調函數放在當前執行棧的尾部

function next(){
  console.log(1); //放入棧
  setTimeout(function(){ //放入回調隊列
    console.log(2);
  })
  process.nextTick(function(){
    console.log(3); //放入棧的尾部
    process.nextTick(function(){
      console.log(4); //接着放入棧的尾部
      process.nextTick(function(){
        console.log(5); //又接着放入棧的尾部
      })// 1 3 4 5 2
    })
  })
}
next()

4.node的事件循環

a.v8引擎解析javascript腳本。b.解析後的代碼. C.libuv庫負責Node Api的執行。它將不同任務分配給不同的線程,形成一個事件循環,以異步的方式將任務的執行結果返回給v8引擎。D.v8引擎再將結果返回給用戶。

5.同步和異步,阻塞和非阻塞

同步和異步關注的是消息的通知方式(取決於被調用方)。阻塞和非阻塞關注的是等待結果時的狀態(取決於調用方)

同步阻塞:A給B打電話說,明天我們一起玩吧,B沒有掛電話說(B決定這是同步),讓我思考一下,A一直在等B回答,沒有幹別的事情(A阻塞)
同步非阻塞:A給B打電話說,明天我們一起玩吧,B沒有掛電話說(B決定這是同步),讓我思考一下,A在等B的同時又給C打電話(A非阻塞)
異步阻塞:A給B打電話說,明天我們一起玩吧,B說讓我想一下,一會給你回過去,然後把電話掛掉了(B決定這是異步),A在等B回電話,沒有幹別的事情(A阻塞)。
異步非阻塞:A給B打電話說,明天我們一起玩吧,B說讓我想一下,一會給你回過去,然後把電話掛掉了(B決定這是異步),A等B回電話的過程中又給C打電話(A非阻塞)。

5.node的repl環境。
在開始搜索程序和源文件理輸入cmd,調出cmd控制面板,輸入node,就進入了node的repl環境,我們可以在repl環境裏運行node代碼

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