【发布时间】:2016-07-09 09:09:57
【问题描述】:
我喜欢执行以下代码...但正如您所见 - 它需要 100 亿次循环!所以我想知道 - 你们会建议什么让它旋转得更快?
原因 - 我需要喜欢“蛮力”以获得最佳结果 - 是因为最内在的方法对一些历史数据进行了一些复杂的计算 - 来自数据库的大约 700 万行......所有这一切 - 是找到给定参数的最佳“设置”...这会产生最好的结果...
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; }
【问题讨论】:
-
如果你想尝试100亿个组合,那么你需要100亿个循环,没有变通办法,只能尝试更少的组合(即基于之前的doSomething结果你知道有些值不会好或有更广泛的结果)。如果 doSomething 方法不太难计算并且您只是不时运行它,个人 PC 也可以计算 100 亿次循环。
-
1. NodeJS 的设计是异步的——因此许多多个调用将同时实例化到内部方法......但它仍然只会在一个单一的步骤中运行——我如何同时通过 100 个线程运行代码?简单地加快进程?顺便说一句 - 我需要一直运行这段代码 - 不断了解最佳“设置”是什么样的......因为历史数据也会从一分钟到下一分钟变化......
-
这将占用大量 CPU...您可以使用 Promise(使用像 Bluebird 这样的库),但考虑到您的代码(尤其是对
doSomething(a,b,c,d,e,f)的调用),您必须对其进行大幅更改. -
不确定您是否注意到(可能是复制粘贴错误),但那里有 6 个无限循环。将 a,b,c,d,e,f 的增量从内部切换到外部将修复它。
-
你是对的 - 哈哈......我刚刚解决了这个问题 - 谢谢 ;-)
标签: javascript node.js performance asynchronous while-loop