亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

cgspine / 2267人閱讀

摘要:特性單線程說明也許你會問,為什么還不安裝還不寫代碼還不講模塊前面我說過,不會一來就。另外,單線程中,操作系統(tǒng)沒有創(chuàng)建銷毀線程的時間開銷。單線程缺點如果有用戶造成線程崩潰,那個整個系統(tǒng)都崩潰了。

nodejs特性1--單線程

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

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

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

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


圖1

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


圖2

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

另外,單線程中,操作系統(tǒng)沒有創(chuàng)建、銷毀線程的時間開銷。
單線程缺點:如果有用戶造成線程崩潰,那個整個系統(tǒng)都崩潰了。(不過nodejs很難崩潰,會有相應(yīng)的錯誤事件處理)

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/93149.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    lentrue 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<