PHP 大数据中作为time()函数速度的动态值
PHP dynamical value as time() function speed in bigdata
在十亿次以上的迭代中使用 time() 或任何类似的动态值的首选(内存消耗更少且最快)方法是什么?
A)
$time = time();
foreach($_billion_items_array as $_i => $_v) {
if($_v['time_saved'] < $time + rand(1,100)) {
// do something
}
}
B)
$this->time = time();
foreach($this->$_billion_items_array as $_i => $_v) {
if($_v['time_saved'] < $this->time + rand(1,100)) {
$this->do_something(_v);
}
}
C)
$this->time = time();
function fixTime($_correction) {
return $this->time + $_correction;
}
foreach($this->$_billion_items_array as $_i => $_v) {
if($_v['time_saved'] < $this->fixTime(rand(1,100)) {
$this->do_something(_v);
}
}
我个人更喜欢 C) 但我不知道 PHP 如果每次迭代都将时间存储为变量,将如何使用内存? A) 和 B) 一样吗?
A 肯定是最快的,因为它使用最简单的方法访问循环内的 $time
变量。
C 是迄今为止最慢的,因为它必须在循环的每次迭代中调用您的函数。
您所有的选择使用的 RAM 量大致相同。
如果您进行 10^3 次迭代,none 会有很大不同。但是您正在进行 10^9 次交互,因此您应该尽可能地简化循环中的代码。
而且,我想你想要 foreach()
代替 for()
。
在十亿次以上的迭代中使用 time() 或任何类似的动态值的首选(内存消耗更少且最快)方法是什么?
A)
$time = time();
foreach($_billion_items_array as $_i => $_v) {
if($_v['time_saved'] < $time + rand(1,100)) {
// do something
}
}
B)
$this->time = time();
foreach($this->$_billion_items_array as $_i => $_v) {
if($_v['time_saved'] < $this->time + rand(1,100)) {
$this->do_something(_v);
}
}
C)
$this->time = time();
function fixTime($_correction) {
return $this->time + $_correction;
}
foreach($this->$_billion_items_array as $_i => $_v) {
if($_v['time_saved'] < $this->fixTime(rand(1,100)) {
$this->do_something(_v);
}
}
我个人更喜欢 C) 但我不知道 PHP 如果每次迭代都将时间存储为变量,将如何使用内存? A) 和 B) 一样吗?
A 肯定是最快的,因为它使用最简单的方法访问循环内的 $time
变量。
C 是迄今为止最慢的,因为它必须在循环的每次迭代中调用您的函数。
您所有的选择使用的 RAM 量大致相同。
如果您进行 10^3 次迭代,none 会有很大不同。但是您正在进行 10^9 次交互,因此您应该尽可能地简化循环中的代码。
而且,我想你想要 foreach()
代替 for()
。