3 回答

TA貢獻2011條經驗 獲得超2個贊
Node.js是作為異步處理中的實驗而顯式創建的。從理論上講,與典型的基于線程的實現相比,在典型的Web負載下對單個線程執行異步處理可以提供更高的性能和可伸縮性。
你知道嗎?我認為理論已經被證實。與Apache或IIS或其他基于線程的服務器相比,不占用大量CPU資源的node.js應用程序可以運行數千個并發連接。
單線程異步性質的確使事情變得復雜。但是,老實說,您認為它比線程處理還要復雜嗎?一種種族狀況可能會破壞您的整個月!或由于某處的某些設置而清空線程池,并觀察響應時間變慢以進行爬網!更不用說死鎖,優先級反轉以及與多線程相關的所有其他回旋。
最后,我不認為它普遍好壞。這是不同的,有時更好,有時則不是。使用正確的工具完成工作。

TA貢獻1772條經驗 獲得超8個贊
服務器的“每個請求一個線程”模型的問題在于,與事件循環線程模型相比,它們在幾種情況下無法很好地擴展。
通常,在I / O密集型方案中,請求花費大部分時間等待I / O完成。在此期間,在“每個請求一個線程”模型中,鏈接到該線程的資源(例如內存)未使用,內存是限制因素。在事件循環模型中,循環線程選擇要處理的下一個事件(I / O完成)。因此,線程總是很忙(如果正確編程的話)。
事件循環模型看起來很新鮮,所有問題的解決方案都取決于您需要解決的情況,但是要使用哪種模型。如果您具有密集型I / O方案(如代理),則將以事件基模型為準,而并行進程數量較少的CPU密集型方案將最適合基于線程的模型。
在現實世界中,大多數情況都將處于中間位置。您將需要在可伸縮性的實際需求與開發復雜性之間找到平衡,以找到正確的體系結構(例如,具有事件基前端,該事件基前端可以委托后端執行CPU密集型任務。前端將使用很少的資源來等待任務與任何分布式系統一樣,它需要付出一些努力才能使其正常工作。
如果您不費吹灰之力地尋找適合任何情況的銀色子彈,那么最終您將獲得一枚子彈。
- 3 回答
- 0 關注
- 964 瀏覽
添加回答
舉報