簡體   English   中英

Node.js是單線程的,但如何在1秒內處理相同的並發請求

[英]Nodejs is single threaded but how it can process same concurrent request in 1 sec

我有scenerio假設客戶端向節點服務器發送請求,而節點js用單線程處理它需要1秒。 那么我的問題是:

處理同一1000個請求將花費多少時間在同一時間。

我知道答案只有1秒。 但是我不知道如何。 應該花費1000秒,因為每個請求都需要1秒來處理。 請告訴我如何通過單線程在一秒鍾內完成所有請求

如果每個請求的實際完整CPU使用率是1秒,那么處理1000個請求將花費1000秒。 周圍沒有魔術子彈。 因此,要以每秒1000個的速度處理,您將需要1000個CPU(顯然分布在許多群集服務器上)。

但是,如果1秒鍾的響應時間實際上只是請求的總時間,而node.js可能大部分時間在等待數據庫查找或文件操作(兩者都是異步的),則CPU處於空閑狀態在很多時候,一個請求正在等待某些I / O操作響應時,它可能正在處理另一個請求。 然后,當那個人在等待I / O時,它可以啟動另一個請求。 這樣,單個線程可以同時具有多個進行中的不同請求(假設這些請求在處理過程中正在執行一些異步I / O)。 通過這種方式,node.js交錯執行多個不同的操作,但是所有操作都只有一個線程。

這是node.js設計的大規模優勢。 與其為每個並發請求都需要一個相當重的線程,它實際上可以通過一個線程為多個請求提供服務。 無需使用操作系統級調度和多個堆棧幀來划分操作系統級線程的時間,而是只要一個JS塊正在等待控制返回給系統,Node.js便將控制權交給事件隊列中的另一個事件。 / O響應事件回來。

請告訴我如何通過單線程在一秒鍾內完成所有請求

僅在任何給定請求的實際CPU時間少於1/1000秒的情況下才有可能。 否則,您將必須使用多個CPU才能處理1000個請求/秒。 您可能還需要多個網卡,因為您正在談論的是能夠在不到1ms的時間內讀取請求並發送響應。 單個網卡不太可能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM