php使用佇列 SplQueue類學習記錄

bigdaxin發表於2021-10-16

專案中發現
關於php SplQueue類--佇列 學習記錄
檢視手冊

關於php SplQueue類--佇列 學習記錄
執行程式碼 比較陣列佇列 和 SplQueue

list($t1, $t2) = explode(' ', microtime());
$st = (float)sprintf('%.0f', (floatval($t1) + floatval($t2)) * 1000);

$splq = new SplQueue;
for($i = 0; $i < 100000; $i++)
{
    $data = "hello $i\n";
    $splq->enqueue($data);

    if ($i % 100 == 99 and count($splq) > 100)
    {
        $popN = rand(10, 99);
        for ($j = 0; $j < $popN; $j++)
        {
            $splq->dequeue();
        }
    }
}
list($t1, $t2) = explode(' ', microtime());
$et = (float)sprintf('%.0f', (floatval($t1) + floatval($t2)) * 1000);

echo $et - $st;
echo "\n";

list($t1, $t2) = explode(' ', microtime());

$st = (float)sprintf('%.0f', (floatval($t1) + floatval($t2)) * 1000);
$arrq = array();
for($i = 0; $i <100000; $i++)
{
    $data = "hello $i\n";
    array_push($arrq, $data);
    if ($i % 100 == 99 and count($arrq) > 100)
    {
        $popN = rand(10, 99);
        for ($j = 0; $j < $popN; $j++)
        {
            array_shift($arrq);
        }
    }
}
$popN = count($arrq);
for ($j = 0; $j < $popN; $j++)
{
    array_shift($arrq);
}

list($t1, $t2) = explode(' ', microtime());
$et = (float)sprintf('%.0f', (floatval($t1) + floatval($t2)) * 1000);

echo $et - $st;
echo "\n";

果然差距還是相當大
關於php SplQueue類--佇列 學習記錄

參考文章:www.cnblogs.com/itsuibi/p/10870608...

陣列每次出隊入隊記憶體地址都會移動會很慢,php就用Splqueue類來實現佇列。
具體Splqueue怎麼實現的,就下回再學習了,簡單記錄一下。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
放肆瘋狂,委婉灑脫。

相關文章