javascript - NodeJS 中的多个嵌入循环

标签 javascript node.js performance asynchronous while-loop

我喜欢执行以下代码...但是正如您所看到的 - 这将需要 100 亿次循环!所以我想知道 - 你们会建议什么让它旋转得更快?

为什么 - 我需要喜欢“暴力”以获得最佳结果 - 是因为最内部的方法对一些历史数据进行一些复杂的计算 - 来自数据库的大约 700 万行......以及这样做的要点所有这一切 - 是找到给定参数 a-f 的最佳“设置”...从而给出最佳结果...

var a = 0.1;

while(a <= 10) // 100
{
    var b = 0.1;

    while(b <= 10) // 100
    {
        var c = 0.1;

        while(c <= 10) // 100
        {
            var d = 0.1;

            while(d <= 10) // 100
            {
                var e = 1;

                while(e <= 10) // 10
                {
                    var f = 1;

                    while(f <= 10) // 10 10.000.000.000
                    {
                        // Call at method which use all parameters and return the result of a given calculation
                        //doSomeThing(a,b,c,d,e,f);
                        f += 1;
                    }
                    e += 1;
                }
                d += 0.1;
            }
            c += 0.1;
        }
        b += 0.1;
    }
    a += 0.1;
}

最佳答案

使用核心集群模块将循环分成更小的 block 并 fork 进程,在 fork 中处理每个更小的 block 。 fork 将在单独的线程上运行,更好地利用 CPU。

https://nodejs.org/api/cluster.html#cluster_how_it_works

更新。好的,不要使用集群。使用threads模块来代替——它会容易得多。 https://www.npmjs.com/package/threads ...

var cores = require('os').cpus().length;
var Pool = require('threads').Pool; 
var pool = new Pool(cores);

var doSomeThing = pool.run(function(data,done){
    var result = data.a * data.b * data.c * data.d * data.e * data.f;
    done(result,data);
})


var a = 0.1;
var b = 0.1;
var c = 0.1;
var d = 0.1;
var e = 0.1;
var f = 0.1;


while(a <= 10) // 100 loops
{
    while(b <= 10) // 100 loops
    {
        while(c <= 10) // 100 loops
        {
            while(d <= 10) // 100 loops
            {
                while(e <= 10) // 10 loops
                {
                    while(f <= 10) // 10 loops
                    {
                        // Call at method which use all parameters and return the result of a given calculation
                        doSomeThing.send({a:a,b:b,c:c,d:d,e:e,f:f});
                        f += 0.1;
                    }
                    e += 0.1;
                }
                d += 0.1;
            }
            c += 0.1;
        }
        b += 1;
    }
    a += 1;
}

pool
  .on('error', function(job, error) {
    console.error('Job errored:', job);
  })
  .on('finished', function() {
    console.log('Everything done, shutting down the thread pool.');
    pool.killAll();
  });

关于javascript - NodeJS 中的多个嵌入循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36155096/

相关文章:

javascript - 你应该如何在 React.js 中调试 JSX?

javascript - 数据库选择服务中的所有angular websql,获取数组

javascript - 单击不起作用滑出菜单栏

performance - Qt4/Qt5 QListWidget 慢吗?

python - 如何有效地将多个列添加到 pandas 数据框中,其值依赖于其他动态列

javascript - JWT jsonwebtoken在node.js中没有过期

javascript - 子进程打开意外的 Electron 窗口

node.js - 在 Node.js 和 Socket.io 聊天应用程序中解析表情符号

javascript - MomentJS 错误输出

c# - 在 32 位 Windows XP 下的 C#4/T-SQL2008 应用程序中使用 Int64/bigint 而不是 Int32/int 的性能损失有多大?