[英]Executing CPU heavy HTTP requests asynchronously in node
我有一個節點應用程序,該應用程序使用節點畫布從文件生成點圖。
我在請求互相阻止時遇到問題。 這些請求涉及大型陣列(長度接近一百萬)的CPU重循環。
例如,我有一個請求會對文件進行一些分析。 這涉及遍歷長度為800k +的數組並計算平均值。
app.get('/api/get/statistics', function(req, res) {
// Promise here which gets files and loops through and calculates mean
});
另一個請求遍歷同一數組並創建圖形並返回到UI。
app.get('/api/canvas', function(req, res) {
// creates the graph
});
單獨,第一個請求大約需要40秒,第二個大約需要13秒。 但是,當我同時發出請求時,第二個請求將在排隊時花費大約53秒(有時會超時)。
有沒有解決的辦法? 我當時想我可以使用子進程,也許與此包一起使用 。 但是從這個問題看來,單獨的HTTP請求可能無法實現。
注意:我不想在同一請求中執行這些操作。 在大多數情況下,我會向/ api / canvas端點發出多個請求以創建不同的圖。 所以我基本上想知道是否可以同時執行這些CPU重請求?
將計算分派到另一個進程以使其異步,並防止它像現在那樣阻塞NodeJS線程。
一種方法是使用child_process.fork
並通過child.send
child_process.fork
通信。 如果子進程不是NodeJS進程,請通過其stdin
和stdout
進行相應的請求和響應,而stderr
進行錯誤處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.