為什麼要使用 SPL中的 SplQueue實現佇列

2021-09-22 21:06:27 字數 2051 閱讀 7260

今天看php的spl標準庫部分裡面涉及到資料結構其中有 splqueue 來實現佇列效果,但是我剛接觸php的時候學習到的是 使用array的 array_push 和 array_pop 就可以實現佇列效果啦啊,那麼說 spl中的這個是不是顯得很雞肋呢??後來進過查詢資料並且實際執行一下程式後發現,其實在效能方面,使用spl的資料結構比使用array模擬出來的佇列在效能上強很多:

array陣列模擬佇列,處理100000任務

複製**

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

s t=

(flo

at)s

prin

tf(′

st = (float)sprintf('%.0f', (floatval(

st=(fl

oat)

spri

ntf(

′t1) + floatval($t2)) * 1000);

a rr

q=ar

ray(

);fo

r(

arrq = array(); for(

arrq=a

rray

();f

or(i = 0; $i <100000; $i++)

', got 'eof' at end of input: … array_shift(arrq);}}}po

pn=c

ount

(popn = count(

popn=c

ount

(arrq);

for ($j = 0; $j < $popn; katex parse error: expected '}', got 'eof' at end of input: … array_shift(arrq);

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

e t=

(flo

at)s

prin

tf(′

et = (float)sprintf('%.0f', (floatval(

et=(fl

oat)

spri

ntf(

′t1) + floatval($t2)) * 1000);

echo $et - $st;

複製**

執行三次取平均值為:3900 ms

使用splqueue

複製**

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

s t=

(flo

at)s

prin

tf(′

st = (float)sprintf('%.0f', (floatval(

st=(fl

oat)

spri

ntf(

′t1) + floatval($t2)) * 1000);

s pl

q=ne

wspl

queu

e;fo

r(

splq = new splqueue; for(

splq=n

ewsp

lque

ue;f

or(i = 0; $i < 100000; $i++)

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

e t=

(flo

at)s

prin

tf(′

et = (float)sprintf('%.0f', (floatval(

et=(fl

oat)

spri

ntf(

′t1) + floatval($t2)) * 1000);

echo $et - $st;

複製**

執行三次取平均值為:117 ms

效能提公升 33 倍

深圳**建設

C 中為什麼要使用斷言

斷言assert是僅在debug下有效的巨集,當其中的條件為假時,觸發錯誤提示。使用斷言的目的是捕捉不應該發生的非法情況。注意 不要混淆非法情況與錯誤情況之間的區別,後者的出現是因為 錯誤,是一定要作出處理的。如何使用 1 在函式的入口處,使用斷言檢查引數的有效性 合法性 2 在編寫函式時,要進行反...

React中為什麼要使用immutableJs

當父元件讀取子元件資料form,賦值給obj,然後對obj進行一些修改過程中,直接賦值就是淺拷貝,修改obj之後會影響form物件,也就會影響子元件中的form的值,這也就是js中的隱患,在react中向上層元件或者下層元件傳遞物件,很難保證這個物件是否會被修改,當不希望對form產生影響的時候,需...

為什麼要使用blog

有哥們問我,你為什麼使用blog?我總結了一下,覺得有如下幾個原因。1對自己的督促 有了blog,就會經常記得寫點東西 就會經常翻翻網上的新文章,了解一下新技術,不至於迷失在忙碌的生活中 如果把自己的所感所想所學寫出了,自己對自己也會有個概念,不至於迷迷糊糊 還有,畢竟是掛在網上的文字,心中難免擔心...