成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

快速學(xué)習(xí)nodejs系列:四、nodejs特性1--單線程

cgspine / 2205人閱讀

摘要:特性單線程說(shuō)明也許你會(huì)問(wèn),為什么還不安裝還不寫(xiě)代碼還不講模塊前面我說(shuō)過(guò),不會(huì)一來(lái)就。另外,單線程中,操作系統(tǒng)沒(méi)有創(chuàng)建銷毀線程的時(shí)間開(kāi)銷。單線程缺點(diǎn)如果有用戶造成線程崩潰,那個(gè)整個(gè)系統(tǒng)都崩潰了。

nodejs特性1--單線程

說(shuō)明:也許你會(huì)問(wèn),為什么還不安裝nodejs?還不寫(xiě)代碼?還不講模塊?前面我說(shuō)過(guò),不會(huì)一來(lái)就hello world。而是會(huì)先跟大家講講nodejs的特點(diǎn),只有大家明白、理解nodejs的特點(diǎn),在后面的模塊學(xué)習(xí)中,會(huì)有種豁然開(kāi)朗的感覺(jué),也會(huì)更加明白為什么nodejs會(huì)這樣設(shè)計(jì);比起一上來(lái)就看文檔、寫(xiě)代碼更加事半功倍;比起代碼層面的東西,原理更為重要!

在php,java語(yǔ)言中,會(huì)為每一個(gè)客戶端連接都創(chuàng)建一個(gè)新的線程。以php(php-fpm、單進(jìn)程單線程)為例,每一個(gè)php-fpm工作線程大概消耗20M內(nèi)存,一個(gè)8G的服務(wù)器,大概同時(shí)支持400個(gè)左右客戶端連接。要想支持更加多的客戶端連接,只能增加服務(wù)器數(shù)量,這樣一來(lái)硬件的費(fèi)用成本就上來(lái)了。

在nodejs始終只有唯一一個(gè)線程,它不為每一個(gè)客戶端的連接新開(kāi)線程。據(jù)某些測(cè)試,一個(gè)8G內(nèi)存的服務(wù)器同時(shí)支持4萬(wàn)了連接。nodejs通過(guò)自己內(nèi)部事件機(jī)制、異步I/O,在宏觀上達(dá)到并行。

例子說(shuō)明:
如一個(gè)任務(wù)中有3個(gè)線程;
在多線程中(圖1),它3個(gè)線程是同時(shí)并行的,但由于每個(gè)線程中都有I/O操作,都要等阻塞I/O完成后才能進(jìn)行下面的程序。


圖1

在Nodejs單線程中,首先會(huì)把所有要執(zhí)行的線程放到“事件?!敝校陂_(kāi)始執(zhí)行第一個(gè)線程后,遇到I/O時(shí),會(huì)馬上把當(dāng)前的I/o操作放到事件棧中并開(kāi)始執(zhí)行線程2;當(dāng)線程1的I/O執(zhí)行完成后,程序會(huì)回到線程1,并執(zhí)行線程1的程序2;當(dāng)線程2中遇到I/O,也會(huì)放到事件棧中;程序轉(zhuǎn)而去處理其他;就是這樣的循環(huán),讓程序達(dá)到并行效果,這個(gè)線程的利用率是100%的。


圖2

如果你還不明白的話,我們可以用生活的例子來(lái)進(jìn)一步說(shuō)明:餐廳和服務(wù)員的關(guān)系;多線程--招很多個(gè)服務(wù)員,每個(gè)服務(wù)員干特定的活(點(diǎn)菜、沖茶、收桌子),干完自己的活后可以休息;而單線程--只招了一個(gè)服務(wù)員,所有的活都有他自己一個(gè)人干,干什么他自己決定,甚至點(diǎn)菜干到一半,去把沖茶干完后,再回來(lái)繼續(xù)點(diǎn)菜也可以。

另外,單線程中,操作系統(tǒng)沒(méi)有創(chuàng)建、銷毀線程的時(shí)間開(kāi)銷。
單線程缺點(diǎn):如果有用戶造成線程崩潰,那個(gè)整個(gè)系統(tǒng)都崩潰了。(不過(guò)nodejs很難崩潰,會(huì)有相應(yīng)的錯(cuò)誤事件處理)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/93149.html

相關(guān)文章

  • 快速學(xué)習(xí)nodejs系列:六、nodejs特性3--事件驅(qū)動(dòng)

    摘要:事件驅(qū)動(dòng)在中,當(dāng)某個(gè)執(zhí)行完畢后,會(huì)以事件的形式通知執(zhí)行操作的線程而線程去執(zhí)行對(duì)應(yīng)事件的回調(diào)函數(shù)。為了處理異步,線程必須要有事件循環(huán),不斷的檢查有沒(méi)有事件要處理,并依次處理。其實(shí)在底層中,有一半的代碼,都是在處理事件隊(duì)列回調(diào)函數(shù)。 事件驅(qū)動(dòng) 上一節(jié)中,我們提到異步I/O;當(dāng)I/O處理完畢后,nodejs是怎樣知道I/O已經(jīng)完成了呢?又是怎樣去處理的呢?答案是:事件驅(qū)動(dòng)(事件循環(huán))機(jī)制。 ...

    ashe 評(píng)論0 收藏0
  • 快速學(xué)習(xí)nodejs系列:五、nodejs特性2--非阻塞I/O

    摘要:非阻塞下面我們繼續(xù)看看的第個(gè)特性非阻塞異步首先,看看什么是非阻塞呢操作,在程序中我們可以廣泛的認(rèn)為是從數(shù)據(jù)庫(kù)讀數(shù)據(jù)從硬盤(pán)上讀寫(xiě)文件等。當(dāng)處理完畢后,是怎樣知道該完成了這里就要說(shuō)到第個(gè)特性了事件驅(qū)動(dòng)。 非阻塞I/O 下面我們繼續(xù)看看,nodejs的第2個(gè)特性--非阻塞I/O(異步I/O) 首先,看看什么是非阻塞I/O呢?I/O操作,在程序中我們可以廣泛的認(rèn)為是:從數(shù)據(jù)庫(kù)讀數(shù)據(jù)、從硬盤(pán)上讀...

    Baaaan 評(píng)論0 收藏0
  • 快速學(xué)習(xí)nodejs系列:三、nodejs是什么

    摘要:是什么官網(wǎng)上的定義翻譯過(guò)來(lái)是一個(gè)基于引擎的運(yùn)行環(huán)境。使用了一個(gè)事件驅(qū)動(dòng)非阻塞式的模型,使其輕量又高效。的包管理器,是全球最大的開(kāi)源庫(kù)生態(tài)系統(tǒng)。的特點(diǎn)非常重要單線程事件驅(qū)動(dòng)事件循環(huán)非阻塞異步所謂的特點(diǎn),就是是怎樣解決服務(wù)器高性能的問(wèn)題。 nodejs是什么 nodejs官網(wǎng)(nodejs.org)上的定義:Node.js? is a JavaScript runtime built on...

    zilu 評(píng)論0 收藏0
  • nodejs 基礎(chǔ)篇整合

    摘要:基礎(chǔ)篇整合最近有朋友也想學(xué)習(xí)相關(guān)方面的知識(shí),如果你是后端想接近前端,作為一門(mén)跑在服務(wù)端的語(yǔ)言從這里入門(mén)再好不過(guò)了。事件驅(qū)動(dòng)機(jī)制是通過(guò)內(nèi)部單線程高效率地維護(hù)事件循環(huán)隊(duì)列來(lái)實(shí)現(xiàn)的,沒(méi)有多線程的資源占用和上下文的切換。 nodeJs 基礎(chǔ)篇整合 最近有朋友也想學(xué)習(xí)nodeJs相關(guān)方面的知識(shí),如果你是后端想接近前端,node作為一門(mén)跑在服務(wù)端的JS語(yǔ)言從這里入門(mén)再好不過(guò)了。如果你正好喜歡前端,...

    lemanli 評(píng)論0 收藏0
  • nodejs 基礎(chǔ)篇整合

    摘要:基礎(chǔ)篇整合最近有朋友也想學(xué)習(xí)相關(guān)方面的知識(shí),如果你是后端想接近前端,作為一門(mén)跑在服務(wù)端的語(yǔ)言從這里入門(mén)再好不過(guò)了。事件驅(qū)動(dòng)機(jī)制是通過(guò)內(nèi)部單線程高效率地維護(hù)事件循環(huán)隊(duì)列來(lái)實(shí)現(xiàn)的,沒(méi)有多線程的資源占用和上下文的切換。 nodeJs 基礎(chǔ)篇整合 最近有朋友也想學(xué)習(xí)nodeJs相關(guān)方面的知識(shí),如果你是后端想接近前端,node作為一門(mén)跑在服務(wù)端的JS語(yǔ)言從這里入門(mén)再好不過(guò)了。如果你正好喜歡前端,...

    lentrue 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<