一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

PHP中copy on write寫時復(fù)制機制介紹

什么是寫時復(fù)制(Copy On Write)?

答:在復(fù)制一個對象的時候并不是真正的把原先的對象復(fù)制到內(nèi)存的另外一個位置上,而是在新對象的內(nèi)存映射表中設(shè)置一個指針,指向源對象的位置,并把那塊內(nèi)存的Copy-On-Write位設(shè)置為1.這樣,在對新的對象執(zhí)行讀操作的時候,內(nèi)存數(shù)據(jù)不發(fā)生任何變動,直接執(zhí)行讀操作;而在對新的對象執(zhí)行寫操作時,將真正的對象復(fù)制到新的內(nèi)存地址中,并修改新對象的內(nèi)存映射表指向這個新的位置,并在新的內(nèi)存位置上執(zhí)行寫操作。

這個技術(shù)需要跟虛擬內(nèi)存和分頁同時使用,好處就是在執(zhí)行復(fù)制操作時因為不是真正的內(nèi)存復(fù)制,而只是建立了一個指針,因而大大提高效率。但這不是一直成立的,如果在復(fù)制新對象之后,大部分對象都還需要繼續(xù)進行寫操作會產(chǎn)生大量的分頁錯誤,得不償失。所以COW高效的情況只是在復(fù)制新對象之后,在一小部分的內(nèi)存分頁上進行寫操作。

php 內(nèi)核中同樣使用了寫時復(fù)制機制來避免在賦值時導(dǎo)致內(nèi)存增加,比如我們在使用foreach循環(huán)體時,可以發(fā)現(xiàn)其中的奧秘,示例代碼:

復(fù)制代碼 代碼如下:
$m1 = memory_get_usage();
$str=<<<EOF
aaaaaaaaaaaaaa
aaaaaaaaaaaaaa
aaaaaaaaaaaaaa
EOF;
$arr = explode("/n", $str);
$count=0;
foreach($arr as $v){
    $count++;
    //$v='aaaaaaaaaaaaaa';
}
$m2 = memory_get_usage();
echo $m2-$m1;

當(dāng)我們執(zhí)行此代碼時會得到內(nèi)存占用為:788

復(fù)制代碼 代碼如下:
$m1 = memory_get_usage();
$str=<<<EOF
aaaaaaaaaaaaaa
aaaaaaaaaaaaaa
aaaaaaaaaaaaaa
EOF;
$arr = explode("/n", $str);
$count=0;
foreach($arr as $v){
$count++;
$v='aaaaaaaaaaaaaa';
}
$m2 = memory_get_usage();
echo $m2-$m1;

當(dāng)我們?nèi)∠?//$v='aaaaaaaaaaaaaa';  的注釋,此時內(nèi)存占用數(shù)值為:840,注意內(nèi)存增長了。

復(fù)制代碼 代碼如下:
$m1 = memory_get_usage();
$str=<<<EOF
aaaaaaaaaaaaaa
aaaaaaaaaaaaaa
aaaaaaaaaaaaaa
EOF;
$arr = explode("/n", $str);
$count=0;
foreach($arr as &$v){
$count++;
//$v='aaaaaaaaaaaaaa';
}
$m2 = memory_get_usage();
echo $m2-$m1;

當(dāng)我們將foreach中的$v 改寫為 &$v 時,不管是否注釋循環(huán)體中對$v的注釋,我們都可以得到內(nèi)存占用為:788

這里就說明了COW機制的介入,當(dāng)我們在foreach循環(huán)中純粹的只用到對$v 的讀操作時,php內(nèi)核會將$v這個變量的內(nèi)存地址指向到$arr中數(shù)組這一索引的內(nèi)存地址,并沒有將數(shù)組中的數(shù)據(jù)復(fù)制一份給到變量$v,此時內(nèi)存占用情況和使用&$v 是一樣的。但當(dāng)我們在循環(huán)體內(nèi)對$v進行寫操作時,寫時復(fù)制機制就被激活了,此時php會重新開辟一段內(nèi)存空間給到$v變量,而將原先$v指向數(shù)組的內(nèi)存地址給斷開了,此時內(nèi)存必然就會增長了。

這里可以得出另外一個結(jié)論:當(dāng)我們在讀取大數(shù)據(jù)的時候,要注意COW機制引入的內(nèi)存增長影響,同樣避免不必要的對變量寫,可以提高代碼運行性能。

php技術(shù)PHP中copy on write寫時復(fù)制機制介紹,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 五月天婷婷一区二区三区久久 | 高清视频 一区二区三区四区 | 黄色avav | 久久综合色区 | 成人免费观看黄a大片夜月 成人免费观看视频 | 久久精品免费一区二区三区 | 欧美另类xxx精品人妖 | 国产精品一区在线免费观看 | 亚洲欧美手机在线观看 | 亚洲精品在线视频 | 都市激情亚洲色图 | 国内精品小视频福利网址 | 国产日韩欧美一区二区三区视频 | 人人做人人爽人人爱影视 | 丁香视频在线 | 一区二区在线免费观看 | 精品久久久影院 | 欧美中文字幕一区二区三区 | 亚洲韩国日本欧美一区二区三区 | 亚洲国产精品激情在线观看 | 国产超清在线观看 | 国产一区二区三区视频 | 欧美透逼 | 国产人成精品 | 国产伦精一区二区三区 | 欧美综合在线视频 | 国产51社区精品视频资源 | 欧美一区二区三区视频 | 一区二区三区在线免费 | 国产精品成人第一区 | 久久精品久久久久久久久人 | 亚洲一区不卡 | 国产高颜值露脸在线观看 | 视色4se成人午夜精品 | 4k岛国精品午夜高清在线观看 | 91看片在线观看 | 一区二区三区四区精品视频 | www.黄色免费 | 亚洲黄色美女 | 加勒比在线免费视频 | 午夜性色视频 |