最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js 的異步 IO 性能探討

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

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

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

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

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

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

相關(guān)文章

  • 基于node打包可執(zhí)行文件工具_(dá)Pkg使用心得分享

    基于node打包可執(zhí)行文件工具_(dá)Pkg使用心得分享

    下面小編就為大家分享一篇基于node打包可執(zhí)行文件工具_(dá)Pkg使用心得分享,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • NodeJS之優(yōu)缺點及適用場景討論

    NodeJS之優(yōu)缺點及適用場景討論

    這篇文章主要介紹了NodeJS之優(yōu)缺點及適用場景討論,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • node.js 模塊和其下載資源的鏡像設(shè)置的方法

    node.js 模塊和其下載資源的鏡像設(shè)置的方法

    這篇文章主要介紹了node.js 模塊和其下載資源的鏡像設(shè)置的方法,在設(shè)置淘寶鏡像共有三種方法,每種方法通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2018-09-09
  • nodejs入門教程五:連接數(shù)據(jù)庫的方法分析

    nodejs入門教程五:連接數(shù)據(jù)庫的方法分析

    這篇文章主要介紹了nodejs入門教程之連接數(shù)據(jù)庫的方法,結(jié)合實例形式分析了nodejs連接數(shù)據(jù)庫的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • Express進階之log4js實用入門指南

    Express進階之log4js實用入門指南

    本篇文章主要介紹了Express進階之log4js實用入門指南,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • node.js實現(xiàn)逐行讀取文件內(nèi)容的代碼

    node.js實現(xiàn)逐行讀取文件內(nèi)容的代碼

    這篇文章主要介紹了node.js實現(xiàn)逐行讀取文件內(nèi)容的代碼,本文還介紹了一個node.js的按行讀取內(nèi)容開源項目,需要的朋友可以參考下
    2014-06-06
  • node通過npm寫一個cli命令行工具

    node通過npm寫一個cli命令行工具

    本篇文章主要介紹了node通過npm寫一個cli命令行工具 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Node.js項目中調(diào)用JavaScript的EJS模板庫的方法

    Node.js項目中調(diào)用JavaScript的EJS模板庫的方法

    這篇文章主要介紹了Node.js項目中調(diào)用JavaScript的EJS模板庫的方法,通過EJS模板引擎可以制作出維護性良好的HTML代碼結(jié)構(gòu),需要的朋友可以參考下
    2016-03-03
  • Nest.js中使用HTTP五種數(shù)據(jù)傳輸方式小結(jié)

    Nest.js中使用HTTP五種數(shù)據(jù)傳輸方式小結(jié)

    本文主要介紹了Nest.js中使用HTTP五種數(shù)據(jù)傳輸方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 詳解nodejs 文本操作模塊-fs模塊(五)

    詳解nodejs 文本操作模塊-fs模塊(五)

    本篇文章主要介紹了nodejs 文本操作模塊-fs模塊(五),這里再說最后一個我看來很重要的方法,監(jiān)聽文件或者目錄的的方法watchFile。有興趣的可以了解一下。
    2016-12-12

最新評論

定兴县| 柳江县| 绵阳市| 托克托县| 铜陵市| 陕西省| 新巴尔虎左旗| 锦州市| 观塘区| 台湾省| 文山县| 蕲春县| 汉沽区| 科尔| 吴堡县| 都安| 乐业县| 车险| 东兴市| 莆田市| 巫山县| 威宁| 隆子县| 中阳县| 宁津县| 平罗县| 美姑县| 香港 | 万源市| 五莲县| 梅州市| 吐鲁番市| 岑巩县| 庐江县| 江西省| 小金县| 柳河县| 景德镇市| 阳泉市| 长宁区| 襄城县|