欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node.js 的異步 IO 性能探討

 更新時間:2014年10月08日 09:24:25   投稿:hebedich  
Node.js 的賣點是「異步單線程」,雖然主流 Web 后端編程語言中,對異步編程有很好支持的語言并不少,但只有 Node.js 喪心病狂地將所有 IO 強制異步進行。

Python 和 Ruby 也有這樣的框架,但因為在實際使用中會不可避免地用到含有同步代碼的庫,因此沒能成長起來,而在 Node.js 之前,JavaScript 的服務器端編程幾乎是空白,所以 Node.js 才得以建立起了一個所有 IO 均為異步的代碼庫。

大部分 Web 應用的瓶頸都在 IO, 即讀寫磁盤,讀寫網(wǎng)絡,讀寫數(shù)據(jù)庫。使用怎樣的策略等待這段時間,就成了改善性能的關鍵點。

PHP 的策略:多進程運行,直接原地等待 IO 完成。缺點:多個進程會消耗多份內(nèi)存,進程間難以共享數(shù)據(jù)。
C/C++ 通常的策略:多線程運行,程序自己維護鎖的狀態(tài)。缺點:開發(fā)成本高,容易出錯,不易調(diào)試。
Python(Tornado): 多個請求在單個進程中輪流執(zhí)行,遇到 IO 時切換到另一個請求。缺點:對于單個請求而言,依然沒有最高效地利用時間。
何謂「最高效地利用時間」?比如現(xiàn)在有兩個不相關的數(shù)據(jù)庫查詢,在 PHP 中通常會先執(zhí)行一個,執(zhí)行完成后再執(zhí)行第二個(總時間是 a + b). 顯然這不是最高效的,應該同時執(zhí)行兩個查詢,時間是 max(a, b).

Python 和其他支持多線程的語言的問題就在于,在語言層面,程序員很難告訴虛擬機,應當將兩個操作同時執(zhí)行,即使有辦法,也相當麻煩,大多數(shù)人懶得去用(也不值得去用)。而因為 Node.js 喪心病狂地強制所有 IO 異步執(zhí)行,Node.js 的程序員也可以說是輕車熟路,配合一些改善代碼可讀性庫(promise, async), 可以很輕松地讓不相干的操作并行執(zhí)行。

上面講了異步 IO 的實現(xiàn),那么異步 IO 的優(yōu)勢究竟體現(xiàn)在哪里呢。實際上異步 IO 并不能神奇地減輕服務器的壓力,該加服務器還是一樣要加服務器,只不過異步 IO 會減少單個請求的時間,去掉單個請求中那些無意義的等待時間。所以單位時間內(nèi)處理的請求沒有變化,但每個請求的處理時間卻減少了。從這個角度,服務器也節(jié)約了一些資源——即維持每個請求的連接消耗的內(nèi)存。

相關文章

  • 詳解使用nodeJs安裝Vue-cli

    詳解使用nodeJs安裝Vue-cli

    這篇文章主要介紹了詳解使用nodeJs安裝Vue-cli,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • nodejs socket服務端和客戶端簡單通信功能

    nodejs socket服務端和客戶端簡單通信功能

    這篇文章主要為大家詳細介紹了nodejs socket服務端和客戶端簡單通信功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • 在Node.js應用中讀寫Redis數(shù)據(jù)庫的簡單方法

    在Node.js應用中讀寫Redis數(shù)據(jù)庫的簡單方法

    這篇文章主要介紹了在Node.js應用中讀寫Redis數(shù)據(jù)庫的簡單方法,Redis是一個內(nèi)存式高速數(shù)據(jù)庫,需要的朋友可以參考下
    2015-06-06
  • Node.js發(fā)送HTTP客戶端請求并顯示響應結(jié)果的方法示例

    Node.js發(fā)送HTTP客戶端請求并顯示響應結(jié)果的方法示例

    這篇文章主要介紹了Node.js發(fā)送HTTP客戶端請求并顯示響應結(jié)果的方法,結(jié)合完整實例形式分析了nodejs發(fā)送http請求及響應的相關操作技巧,需要的朋友可以參考下
    2017-04-04
  • NodeJS Web應用監(jiān)聽sock文件實例

    NodeJS Web應用監(jiān)聽sock文件實例

    這篇文章主要介紹了NodeJS Web應用監(jiān)聽sock文件實例,本文講解 NodeJS 的 TCP 和 HTTP 監(jiān)聽 Domain Socket 文件例子,需要的朋友可以參考下
    2015-02-02
  • Node.js版本發(fā)布策略頻率與穩(wěn)定性的平衡

    Node.js版本發(fā)布策略頻率與穩(wěn)定性的平衡

    這篇文章主要為大家介紹了Node.js版本發(fā)布策略頻率與穩(wěn)定性的平衡,幫助大家大家更清晰了解node發(fā)展史,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Mongoose實現(xiàn)虛擬字段查詢的方法詳解

    Mongoose實現(xiàn)虛擬字段查詢的方法詳解

    這篇文章主要給大家介紹了關于Mongoose實現(xiàn)虛擬字段查詢的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。
    2017-08-08
  • PostgreSQL Node.js實現(xiàn)函數(shù)計算方法示例

    PostgreSQL Node.js實現(xiàn)函數(shù)計算方法示例

    這篇文章主要給大家介紹了關于PostgreSQL Node.js實現(xiàn)函數(shù)計算的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-02-02
  • 深入理解Node內(nèi)建模塊和對象

    深入理解Node內(nèi)建模塊和對象

    在node核心中有些內(nèi)建模塊,使用這些模塊可以操作系統(tǒng),文件和網(wǎng)絡,這篇文章主要介紹了深入理解Node內(nèi)建模塊和對象,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • 你所未知的3種Node.js代碼優(yōu)化方式

    你所未知的3種Node.js代碼優(yōu)化方式

    這篇文章主要為大家介紹了3種你所未知的Node.js代碼優(yōu)化方式,幫助大家剛好的進行代碼優(yōu)化,感興趣的小伙伴們可以參考一下
    2016-02-02

最新評論