簡體   English   中英

在節點中異步執行CPU重HTTP請求

[英]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進程,請通過其stdinstdout進行相應的請求和響應,而stderr進行錯誤處理。

暫無
暫無

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

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