首頁 web前端 js教程 Node.js 的非同步 IO 效能探討_node.js

Node.js 的非同步 IO 效能探討_node.js

May 16, 2016 pm 04:34 PM
io node.js 非同步 效能

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

大部分 Web 應用的瓶頸都在 IO, 即讀寫磁碟,讀寫網絡,讀寫資料庫。使用怎樣的策略等待這段時間,就成了改善效能的關鍵點。

PHP 的策略:多進程運行,直接原地等待 IO 完成。缺點:多個進程會消耗多份內存,進程間難以共享資料。
C/C 通常的策略:多執行緒運行,程式自行維護鎖的狀態。缺點:開發成本高,容易出錯,不易調試。
Python(Tornado): 多個請求在單一進程中輪流執行,遇到 IO 時切換到另一個請求。缺點:對於單一請求而言,依然沒有最有效率地利用時間。
何謂「最有效率地利用時間」?例如現在有兩個不相關的資料庫查詢,在PHP 中通常會先執行一個,執行完成後再執行第二個(總時間是a b). 顯然這不是最有效率的,應該同時執行兩個查詢,時間是max(a, b).

Python 和其他支援多執行緒的語言的問題就在於,在語言層面,程式設計師很難告訴虛擬機,應當將兩個操作同時執行,即使有辦法,也相當麻煩,大多數人懶得去用(也不值得去用)。而因為Node.js 喪心病狂地強制所有IO 非同步執行,Node.js 的程式設計師也可以說是輕車熟路,配合一些改善程式碼可讀性函式庫(promise, async), 可以很輕鬆地讓不相干的操作並行執行。

上面講了非同步 IO 的實現,那麼非同步 IO 的優勢究竟體現在哪裡呢。實際上非同步 IO 並不能神奇地減輕伺服器的壓力,該加伺服器還是一樣要加伺服器,只不過異步 IO 會減少單一請求的時間,去掉單一請求中那些無意義的等待時間。所以單位時間內處理的請求沒有變化,但每個請求的處理時間都減少了。從這個角度,伺服器也節省了一些資源——也就是維持每個請求的連線消耗的記憶體。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

本地運作效能超越 OpenAI Text-Embedding-Ada-002 的 Embedding 服務,太方便了! 本地運作效能超越 OpenAI Text-Embedding-Ada-002 的 Embedding 服務,太方便了! Apr 15, 2024 am 09:01 AM

Ollama是一款超實用的工具,讓你能夠在本地輕鬆運行Llama2、Mistral、Gemma等開源模型。本文我將介紹如何使用Ollama實現對文本的向量化處理。如果你本地還沒有安裝Ollama,可以閱讀這篇文章。本文我們將使用nomic-embed-text[2]模型。它是一種文字編碼器,在短的上下文和長的上下文任務上,效能超越了OpenAItext-embedding-ada-002和text-embedding-3-small。啟動nomic-embed-text服務當你已經成功安裝好o

不同Java框架的效能對比 不同Java框架的效能對比 Jun 05, 2024 pm 07:14 PM

不同Java框架的效能比較:RESTAPI請求處理:Vert.x最佳,請求速率達SpringBoot2倍,Dropwizard3倍。資料庫查詢:SpringBoot的HibernateORM優於Vert.x及Dropwizard的ORM。快取操作:Vert.x的Hazelcast客戶端優於SpringBoot及Dropwizard的快取機制。合適框架:根據應用需求選擇,Vert.x適用於高效能Web服務,SpringBoot適用於資料密集型應用,Dropwizard適用於微服務架構。

PHP 陣列鍵值翻轉:不同方法的效能比較分析 PHP 陣列鍵值翻轉:不同方法的效能比較分析 May 03, 2024 pm 09:03 PM

PHP數組鍵值翻轉方法效能比較顯示:array_flip()函數在大型數組(超過100萬個元素)下比for迴圈效能更優,耗時更短。手動翻轉鍵值的for迴圈方法耗時相對較長。

C++ 函式對程式效能有哪些影響? C++ 函式對程式效能有哪些影響? Apr 12, 2024 am 09:39 AM

函数对C++程序性能的影响包括函数调用开销、局部变量和对象分配开销:函数调用开销:包括堆栈帧分配、参数传递和控制权转移,对小函数影响显著。局部变量和对象分配开销:大量局部变量或对象创建和销毁会导致堆栈溢出和性能下降。

C++中如何優化多執行緒程式的效能? C++中如何優化多執行緒程式的效能? Jun 05, 2024 pm 02:04 PM

優化C++多執行緒效能的有效技術包括:限制執行緒數量,避免爭用資源。使用輕量級互斥鎖,減少爭用。優化鎖的範圍,最小化等待時間。採用無鎖定資料結構,提高並發性。避免忙等,透過事件通知執行緒資源可用性。

PHP 數組轉物件對效能的影響是什麼? PHP 數組轉物件對效能的影響是什麼? Apr 30, 2024 am 08:39 AM

在PHP中,陣列到物件的轉換會對效能產生影響,主要受陣列大小、複雜度、物件類別等因素影響。為了優化效能,可以考慮使用自訂迭代器、避免不必要的轉換、批次轉換數組等技巧。

PHP函數的效能如何? PHP函數的效能如何? Apr 18, 2024 pm 06:45 PM

不同PHP函數的效能對應用程式效率至關重要。效能較好的函數包括echo、print,而str_replace、array_merge、file_get_contents等函數效能較慢。例如,str_replace函數用於替換字串,性能中等,而sprintf函數用於格式化字串。效能分析表明,執行一個範例僅需0.05毫秒,證明了函數效能良好。因此,明智地使用函數可以建立更快、更有效率的應用程式。

如何使用基準測試來評估Java函數的效能? 如何使用基準測試來評估Java函數的效能? Apr 19, 2024 pm 10:18 PM

基準測試Java函數效能的方法是使用Java微基準測試套件(JMH)。具體步驟包括:新增JMH依賴項到專案中。建立一個新的Java類,用@State註解表示基準測試方法。在類別中寫基準測試方法,用@Benchmark註解。使用JMH命令列工具執行基準測試。

See all articles