Node-單線程河哑、事件驅動避诽、非阻塞I/O

Nodejs既然這么流行就肯定有它的博大精深之處,自然不是我這還沒入門的小白可以掌握的璃谨,我就簡單說一下目前自己的理解程度沙庐。

一、單線程佳吞、非阻塞I/O拱雏、事件驅動

這是nodejs的三個特點。

  1. 單線程
    Nodejs是單線程底扳,和多線程相比:
    優(yōu)點:可以避免系統(tǒng)分配多線程以及線程間通信時的開銷铸抑,可以更高效的利用cpu,降低內存的耗用衷模。
    缺點:一旦出現錯誤會導致整個程序崩潰鹊汛,不擅長大量的計算,無法利用多核cpu(貌似現在也有辦法)
  2. 非阻塞I/O
    非阻塞I/O從名字上便可以理解阱冶,為了提高程序的性能刁憋,更好的提高線程的利用率,盡量不讓線程空閑著木蹬。
      比如我們想要讀取一個文件至耻,然后再進行一些操作,當然這些操作的前提條件是不需要這個文件的數據,這個時候我們便可以讓系統(tǒng)的某個線程去讀取文件尘颓,同時程序的主線程繼續(xù)執(zhí)行下面的操作走触,程序并不會等待文件讀取完畢才繼續(xù)執(zhí)行,這就像我們常用的ajax
  3. 事件驅動
      Nodejs提供的絕大多數API都是基于事件的疤苹、異步的風格互广,就是服務器程序的入口也是從connect事件開始。
      還是繼續(xù)上面的讀取文件的例子痰催,假如我要讀取一個文件兜辞,然后要打印出文件的內容迎瞧,那么讀取文件便是一個事件(readFile)夸溶,而打印的操作要在事件的回調函數中執(zhí)行。
      在這里又涉及到了事件隊列和事件循環(huán):
      程序主線程順序執(zhí)行凶硅,當遇到一個事件時會將其添加進事件隊列缝裁,Nodejs底層的libuv庫(不要問我這是什么鬼,底層的東西看著都嚇人)負責將事件隊列中不同的事件任務分配給不同的線程去執(zhí)行足绅,執(zhí)行的結果再重新返回給用戶捷绑,這便是事件循環(huán)。
      為什么Nodejs是單線程的氢妈,卻在這里又變成了多線程粹污,其實Nodejs對外展示是單線程的,但內部其實是多線程的首量,Node本身的主線程主要就是起不斷往返調度的作用
二壮吩、例子更好理解

說了這么多,比個例子吧加缘。我在網上定了個外賣鸭叙,老板在店里安排人給我派送,定完外賣之后開始打游戲拣宏,正打著激烈的時候派送員來了沈贝,玩的正嗨呢,沒空開門勋乾,結果派送員在門外等了1一分鐘才去開門宋下,至此我定外賣的這個過程也就結束了。
  在這個例子中我就相當于主線程辑莫,我定了外賣后這個單子就會加入到店鋪的訂單列表学歧,就相當于一個事件加入到了事件隊列,老板就是這個libuv摆昧,他在店里運籌帷幄安排人員給我做飯撩满,然后送外賣,即分配線程執(zhí)行事件任務,當送回來時如果我是空閑的我就會立刻開門收快遞伺帘,但是當時我正忙著(打游戲很重要)昭躺,所以派送員久等了一會,即事件執(zhí)行之后的回調函數是否會立即執(zhí)行要看主線程是否空閑伪嫁。

三领炫、總結
  1. Node 表面上是單線程,其實內部仍然是多線程的张咳,主線程起往返調度
  2. 單線程帝洪、事件驅動、非阻塞I/O,我的理解是事件驅動只是為了實現非阻塞的方式脚猾,非阻塞才是目的
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末葱峡,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子龙助,更是在濱河造成了極大的恐慌砰奕,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件提鸟,死亡現場離奇詭異军援,居然都是意外死亡,警方通過查閱死者的電腦和手機称勋,發(fā)現死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門胸哥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赡鲜,你說我怎么就攤上這事空厌。” “怎么了蝗蛙?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵蝇庭,是天一觀的道長。 經常有香客問我捡硅,道長哮内,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任壮韭,我火速辦了婚禮北发,結果婚禮上,老公的妹妹穿的比我還像新娘喷屋。我一直安慰自己琳拨,他們只是感情好,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布屯曹。 她就那樣靜靜地躺著狱庇,像睡著了一般惊畏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上密任,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天颜启,我揣著相機與錄音,去河邊找鬼浪讳。 笑死缰盏,一個胖子當著我的面吹牛,可吹牛的內容都是我干的淹遵。 我是一名探鬼主播口猜,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼透揣!你這毒婦竟也來了济炎?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤淌实,失蹤者是張志新(化名)和其女友劉穎冻辩,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體拆祈,經...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年倘感,在試婚紗的時候發(fā)現自己被綠了放坏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡老玛,死狀恐怖淤年,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情蜡豹,我是刑警寧澤麸粮,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站镜廉,受9級特大地震影響弄诲,放射性物質發(fā)生泄漏。R本人自食惡果不足惜娇唯,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一齐遵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧塔插,春花似錦梗摇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽断序。三九已至,卻和暖如春糜烹,著一層夾襖步出監(jiān)牢的瞬間逢倍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工景图, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留较雕,地道東北人。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓挚币,卻偏偏與公主長得像亮蒋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子妆毕,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內容

  • 這篇文章大部分內容慎玖,圖片都來自《Unix網絡編程》和《深入淺出Nodejs》這本兩本書。如果有書的同學笛粘,可以直接去...
    自度君閱讀 1,170評論 0 1
  • 轉自: http://www.reibang.com/p/486b0965c296 http://www.jia...
    demop閱讀 3,899評論 1 21
  • 設計高性能Web服務器的要點在于非阻塞I/O和事件驅動 Node最大的特點是異步式I/O(非阻塞I/O)與事件緊密...
    JunChow520閱讀 2,039評論 0 0
  • 從三月份找實習到現在趁怔,面了一些公司,掛了不少薪前,但最終還是拿到小米润努、百度、阿里示括、京東铺浇、新浪、CVTE垛膝、樂視家的研發(fā)崗...
    時芥藍閱讀 42,281評論 11 349
  • 瑜伽后彎之鴿子式 曾經這個瑜伽體式是我一直所向往的鳍侣,今年我開始挑戰(zhàn)并一步一步趨向做到自認為的“完美”。 我喜歡某一...
    舒涵vivian閱讀 692評論 0 4