我有一个节点应用程序,它使用节点画布从文件生成点图图。
我遇到了阻止对方请求的问题。这些请求涉及CPU大量循环(长度接近100万)。
例如,我有一个请求对文件进行一些分析。这涉及循环一个长度为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秒(有时超时)。
有解决方法吗?我以为我可以使用子进程,可能使用this package。但似乎来自this question,单独的HTTP请求可能无法实现。
注意:我不想在同一个请求中执行这些操作。大部分时间我都会向' / api / canvas'端点创建不同的图形。所以我基本上想知道是否可以同时执行这些CPU大量请求?
答案 0 :(得分:1)
将计算调度到另一个进程以使其异步并防止它像现在一样阻塞NodeJS线程。
一种方法是使用child_process.fork
并通过child.send
与之通信。如果子进程不是NodeJS进程,请通过其stdin
和stdout
对请求和响应进行相应的通信,stderr
以查找错误。