天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

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

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

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

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

php 內(nèi)核中同樣使用了寫時(shí)復(fù)制機(jī)制來避免在賦值時(shí)導(dǎo)致內(nèi)存增加,比如我們?cè)谑褂胒oreach循環(huán)體時(shí),可以發(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í)行此代碼時(shí)會(huì)得到內(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';  的注釋,此時(shí)內(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 時(shí),不管是否注釋循環(huán)體中對(duì)$v的注釋,我們都可以得到內(nèi)存占用為:788

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

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

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

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

主站蜘蛛池模板: 日韩a在线看免费观看视频 日韩a视频在线观看 | 最近更新2019中文字幕免费 | 麻豆婷婷狠狠色18禁久久 | 粉嫩极品国产在线观看 | 久久黄色网址 | 久久re这里精品23 | 欧美性暴力变态xxxx | 777久久人妻少妇嫩草AV蜜桃 | 伊人影院久久 | 特级毛片s级全部免费 | 日本理论片和搜子同居的日子2 | 国产婷婷综合在线视频中文 | 九九在线中文字幕无码 | 国产在线视频在线观看 | 97成人碰碰在线人妻少妇 | 恋夜秀场1234手机视频在线观看 | 九九在线精品亚洲国产 | 色琪琪丁香婷婷综合久久 | 麻豆COMCN | 中文字幕网站在线观看 | 捆绑白丝粉色JK震动捧喷白浆 | 亚州免费一级毛片 | 日日噜噜夜夜狠狠视频 | 黑人巨大两根一起挤进欧美 | 欧美gv明星 | 亚洲精品色情婷婷在线播放 | 吃奶啃奶玩乳漫画 | 美女激清床上戏大全 | 入室强伦女教师被学生 | 色多多涩涩屋下载软件 | 日韩精品专区在线影院重磅 | 青柠电影在线看 | caoporn 超碰免费视频 | 日韩免费精品视频 | 99久久免费看少妇高潮A片 | 伊人久久大香线蕉avapp下载 | MATURETUBE乱妇| 国产亚洲精品A久久777777 | 18video性欧美19sex高清 | 六六影院午夜伦理 | 亚洲AV精品无码喷水直播间 |