国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

php終極數(shù)據(jù)緩存,比redis、GlobalData等快200倍以上,極致性能

dingfei

一、效果:每秒讀取2000萬條。寫入2200萬條。cpu開銷很小二、原理:1.將數(shù)據(jù)以數(shù)組方式存儲在內(nèi)存中,php進(jìn)程需要數(shù)據(jù)時直接通過內(nèi)存地址訪問數(shù)據(jù),沒有任何IO開銷以及CPU開銷。
三、具體實現(xiàn):1.利用linux的寫時復(fù)制技術(shù)。運(yùn)行php主進(jìn)程一次性讀取所有的數(shù)據(jù)保存到數(shù)組中,然后通過workerman監(jiān)聽端口。每次收到請求時:創(chuàng)建一個子進(jìn)程去執(zhí)行任務(wù),執(zhí)行完成之后子進(jìn)程自動結(jié)束。
? ? ? 2.子進(jìn)程完全共享主進(jìn)程的數(shù)組,不消耗內(nèi)存。
四、代碼[code] ini_set('memory_limit','5872M'); // 臨時設(shè)置最大內(nèi)存占用為5G
$a = [[[[]]]];
$start = microtime(true);
for ($i=0; $i<=200; $i++) {
for ($j=0; $j<=100; $j++) {
for ($k=0; $k<=1000; $k++) {
$a[$i][$j][$k] = '我是一條數(shù)據(jù)';
}
}
}
// 2000萬數(shù)據(jù),時間1秒,消耗內(nèi)存720M。 相當(dāng)于1000萬-0.5秒-360M
echo microtime(true) - $start, "s。主進(jìn)程寫入完成,當(dāng)前內(nèi)存:" . (memory_get_usage() / 1024 / 1024) . "MB
";
$start = microtime(true);
for ($i=0; $i<=200; $i++) {
for ($j=0; $j<=100; $j++) {
for ($k=0; $k<=1000; $k++) {
$m = $a[$i][$j][$k] ;
}
}
}
echo microtime(true) - $start, "s。主進(jìn)程讀取完成,當(dāng)前內(nèi)存:" . (memory_get_usage() / 1024 / 1024) . "MB
";
$start = microtime(true);
$intNum= 1; // 進(jìn)程總數(shù)
$pids= array(); // 進(jìn)程PID數(shù)組
for($i= 0; $i<$intNum; $i++)
{
$pids[$i] = pcntl_fork();// 產(chǎn)生子進(jìn)程,而且從當(dāng)前行之下開試運(yùn)行代碼,而且繼承父進(jìn)程的所有變量
if($pids[$i] == -1){echo"couldn't fork". "\n";
}elseif(!$pids[$i]){
$m= 0;
$start = microtime(true);
for ($i=0; $i<=200; $i++) {
for ($j=0; $j<=100; $j++) {
for ($k=0; $k<=1000; $k++) {
$m = $a[$i][$j][$k] ;
}
}
}
echo microtime(true) - $start, "s。子進(jìn)程讀取完成,當(dāng)前內(nèi)存:" . (memory_get_usage() / 1024 / 1024) . "MB
";

            sleep(100);
            exit(0);//子進(jìn)程要exit否則會進(jìn)行遞歸多進(jìn)程,父進(jìn)程不要exit否則終止多進(jìn)程
        }
    }
    echo  microtime(true) - $start, "s。子進(jìn)程創(chuàng)建完成,當(dāng)前內(nèi)存:" . (memory_get_usage() / 1024 / 1024) . "MB

";
sleep(200);[/code]
五:代碼運(yùn)行結(jié)果:
1.0883929729462s。主進(jìn)程寫入完成,當(dāng)前內(nèi)存:719.90679168701MB
0.66096806526184s。主進(jìn)程讀取完成,當(dāng)前內(nèi)存:719.90679168701MB
0.0097589492797852s。子進(jìn)程創(chuàng)建完成,當(dāng)前內(nèi)存:719.90715026855MB
0.72923994064331s。子進(jìn)程讀取完成,當(dāng)前內(nèi)存:719.90715026855MB

6512 7 3
7個評論

dingfei

存儲1000萬條數(shù)據(jù),大概占用360M內(nèi)存,耗時0.45秒
讀取1000萬條數(shù)據(jù),耗時0.37秒

  • 暫無評論
dingfei

主進(jìn)程的數(shù)據(jù)可以動態(tài)更新。每次新建的子進(jìn)程總能讀取到最新的數(shù)據(jù)

  • 暫無評論
keytehu

學(xué)習(xí)了。

  • 暫無評論
jiage666

分布式情況下呢?進(jìn)程在不同的機(jī)器上呢?

  • 暫無評論
jiage666

redis 這種最耗時的操作是網(wǎng)絡(luò)時延吧?本來就是內(nèi)存數(shù)據(jù)庫

  • 暫無評論
kenny534

好高深的功力

  • 暫無評論
小陽光

這種效率很高,但是子進(jìn)程不能修改父進(jìn)程寫入的緩存數(shù)據(jù),一旦修改cow觸發(fā)就是兩份數(shù)據(jù)了,一般處理業(yè)務(wù)是子進(jìn)程,從而觸發(fā)修改緩存,導(dǎo)致使用場景有限??梢詫Ρ纫幌鹿蚕韮?nèi)存和redis,redis需要走網(wǎng)絡(luò)。共享內(nèi)存實現(xiàn)緩存不需要。

  • 暫無評論
年代過于久遠(yuǎn),無法發(fā)表評論

dingfei

-14
積分
0
獲贊數(shù)
0
粉絲數(shù)
2019-05-07 加入
??