我有scenerio 假設一個客戶端向節點服務器發送一個請求,並且節點js需要1秒來用單線程處理它。 然後我的問題是:Nodejs是單線程的,但它如何在1秒內處理相同的併發請求
需要多少時間來處理相同的1000請求在同一時刻。
我知道只有1秒的答案。但我不知道如何。 應該花費1000秒,因爲每個 請求需要1秒的處理時間。 。 請告訴我如何通過單線程在一秒內完成所有請求
我有scenerio 假設一個客戶端向節點服務器發送一個請求,並且節點js需要1秒來用單線程處理它。 然後我的問題是:Nodejs是單線程的,但它如何在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設計的一大優勢。它並不需要爲每個併發請求提供一個相當重的線程,它實際上可以通過一個線程爲多個請求提供服務。無論何時使用OS級調度和多個堆棧幀對OS級線程進行時間片切分,node.js只會將控制權交給事件隊列中的另一個事件,只要一塊JS將控制權返回給系統,因爲它正在等待I/O響應事件回來。
請告訴我怎麼可能完成由singlethread
在1秒鐘的所有請求,這隻會是可能的,如果實際的CPU時間對於任何給定的要求是小於1/1/1000一秒。否則,您將不得不涉及多個CPU以處理1000個請求/秒。您也可能需要多個網卡,因爲您正在討論能夠讀取請求並在不到1ms的時間內發送響應。不可能使用單個網卡。
先生其實,我想問你,nodejs可以在一秒內處理函數。所以由於事件循環,只能在1秒內處理1000個函數。 –
@ J.Edy - 我想我已經提供了一個答案。如果您對我的答案的某些部分仍有疑問,請告訴我您不明白答案的哪些部分。 nodejs在1秒內可以完成的功能完全取決於這些功能在做什麼。沒有通用的答案,只有基於特定代碼和可能的一些測試的特定答案。 – jfriend00
@ J.Edy - 這是否回答你的問題?如果確實如此,則可以通過點擊答案左側的綠色複選標記來向社區表明。這也將爲您在堆棧溢出時遵循適當的過程贏得一些聲望點。 – jfriend00