成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

PHP寫時復(fù)制(Copy On Write)

arashicage / 3386人閱讀

摘要:只有在真正需要使用資源時才占用資源,寫時復(fù)制通常能減少資源的占用?;A(chǔ)方面規(guī)范新特性性能調(diào)優(yōu)垃圾回收機制安全攻擊原理和防范攻擊原理和防范注入攻擊防范密碼哈希計算機網(wǎng)絡(luò)協(xié)議協(xié)議連接過程

從一個例子說起:


變量 $foo 賦值給變量 $bar,這兩個變量具有相同的值,沒有必要新申請內(nèi)存空間,他們可以共享同一塊內(nèi)存。在很多場景下PHP 的 COW 對內(nèi)存進行優(yōu)化。比如:變量的多次賦值、函數(shù)參數(shù)傳遞,并在函數(shù)體內(nèi)修改實參等。

什么是“復(fù)制”

這是一段摘自鳥哥博客的例子,說的比較清楚,就直接貼過來了。

很明顯在這段代碼執(zhí)行以后,$var_dup 的值應(yīng)該還是”laruence”, 那么這又是怎么實現(xiàn)的呢?這就是 PHP 的 copy on write 機制:

PHP 在修改一個變量以前,會首先查看這個變量的 refcount,如果 refcount 大于1,PHP 就會執(zhí)行一個分離的例程, 對于上面的代碼,當(dāng)執(zhí)行到第三行的時候,PHP 發(fā)現(xiàn) $var 指向的 zval 的 refcount 大于1,那么 PHP 就會復(fù)制一個新的 zval 出來,將原 zval 的 refcount 減 1,并修改 symbol_table,使得 $var 和 $var_dup 分離(Separation)。這個機制就是所謂的 copy on write(寫時復(fù)制)。

寫時復(fù)制應(yīng)用場景

寫時復(fù)制(Copy on Write,也縮寫為COW)的應(yīng)用場景非常多, 比如Linux中對進程復(fù)制中內(nèi)存使用的優(yōu)化,在各種編程語言中,如C++的STL等等中均有類似的應(yīng)用。 COW是常用的優(yōu)化手段,可以歸類于:資源延遲分配。只有在真正需要使用資源時才占用資源, 寫時復(fù)制通常能減少資源的占用。

一個證明 PHP COW 優(yōu)化內(nèi)存占用的例子:


運行結(jié)果:

$ php t . php
int(630904)
int(10479840)
int(10479944)
int(10480040)

內(nèi)存并沒有顯著提高。

“寫時復(fù)制”的原理

多個相同值的變量共用同一塊內(nèi)存的確節(jié)省了內(nèi)存空間,但變量的值是會發(fā)生變化的,如果在上面的例子中, 指向同一內(nèi)存的值發(fā)生了變化(或者可能發(fā)生變化),就需要將變化的值“分離”出去,這個“分離”的操作, 就是“復(fù)制”。

在PHP中,Zend引擎為了區(qū)別同一個zval地址是否被多個變量共享,引入了ref_count和is_ref兩個變量進行標(biāo)識:

ref_count和is_ref是定義于zval結(jié)構(gòu)體中

is_ref標(biāo)識是不是用戶使用 & 的強制引用;

ref_count是引用計數(shù),用于標(biāo)識此zval被多少個變量引用,即COW的自動引用,為0時會被銷毀;

注:由此可見, $a=$b; 與 $a=&$b; 在PHP對內(nèi)存的使用上沒有區(qū)別(值不變化時);

相信大家也可以了解到PHP中COW的實現(xiàn)原理: PHP 中的 COW 基于引用計數(shù)ref_count 和 is_ref 實現(xiàn), 多一個變量指針,就將 ref_count 加 1, 反之減去 1,減到 0 就銷毀; 同理,多一個強制引用 &,就將 is_ref 加 1,反之減去 1。


講堂報名地址:https://segmentfault.com/l/15...

PHP筆試面試題精選(二) 課程簡述

《PHP筆試面試題精選》課程系列分享關(guān)于 PHP 筆試面試會問到的一些問題和知識點,圍繞 PHP、數(shù)據(jù)庫、計算機網(wǎng)絡(luò)、計算機操作系統(tǒng)、設(shè)計模式、WEB安全等多個方面進行。

課程內(nèi)容

由于涉及到的問題和知識點比較多,本期主要講 PHP基礎(chǔ)、WEB安全、計算機網(wǎng)絡(luò)三個方面有關(guān)的問題。

PHP基礎(chǔ)方面

PSR規(guī)范

PHP新特性

PHP_FPM性能調(diào)優(yōu)

Session垃圾回收機制

WEB安全

XSS攻擊原理和防范

CSRF攻擊原理和防范

SQL注入攻擊防范

密碼哈希

計算機網(wǎng)絡(luò)

HTTP協(xié)議

TCP/IP協(xié)議

WebSocket連接過程

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/28484.html

相關(guān)文章

  • zval _ 引用計數(shù) _ 變量分離 _ 寫時拷貝

    摘要:引用計數(shù)變量分離寫時拷貝我們一步步來理解語言特性是腳本語言,所謂腳本語言,就是說并不是獨立運行的,要運行代碼需要解析器,用戶編寫的代碼最終都會被解析器解析執(zhí)行的執(zhí)行是通過引擎,是用編寫的用戶編寫的代碼最終都會被翻譯成的虛擬機的虛擬指令來執(zhí)行 zval、引用計數(shù)、變量分離、寫時拷貝我們一步步來理解1、php語言特性PHP是腳本語言,所謂腳本語言,就是說PHP并不是獨立運行的,要運行PHP...

    happyfish 評論0 收藏0
  • php 變量分離和引用

    摘要:變量的分離和引用今天看了一下鳥哥博客變量的分離和引用的內(nèi)容就做了一個筆記如果我們我們創(chuàng)建一個變量就分配一次內(nèi)存那么像上邊的代碼那么就會造成內(nèi)存的極大浪費中的變量是一個指向的符號那么我們就可以在中來優(yōu)化上邊的代碼的中有一個字段用來記錄當(dāng)前被引 PHP 變量的分離和引用 今天看了一下鳥哥博客變量的分離和引用的內(nèi)容, 就做了一個筆記! $var = I have a dream; $var2...

    QiuyueZhong 評論0 收藏0
  • PHP底層分析:關(guān)于寫時復(fù)制(cow)

    摘要:可以看到,該結(jié)構(gòu)體存儲了關(guān)于變量值,有幾個變量指向該結(jié)構(gòu)體,變量類型,是否為引用變量等信息。這個就是寫時復(fù)制,在作怪,他沒有在賦值的時候就分裂成兩個結(jié)構(gòu)體,而是在我們改寫其中一個變量時發(fā)生效果,屬于一種慢復(fù)制也稱慢分裂。 想要走到技術(shù)的天花板,那么學(xué)習(xí)過程中在于知其然且知其所以然。 今天我們來討論一下PHP底層的寫時復(fù)制(也稱寫時分裂)。 首先我們先來看看一段代碼:showImg(ht...

    widuu 評論0 收藏0
  • COW奶牛!Copy On Write機制了解一下

    摘要:用于創(chuàng)建子進程等同于當(dāng)前進程的副本。這個函數(shù)會有兩次返回,將子進程的返回給父進程,返回給子進程。當(dāng)父子進程中有更改相應(yīng)段的行為發(fā)生時,再為子進程相應(yīng)的段分配物理空間。中斷例程中,就會把觸發(fā)的異常的頁復(fù)制一份,于是父子進程各自持有獨立的一份。 前言 只有光頭才能變強 在讀《Redis設(shè)計與實現(xiàn)》關(guān)于哈希表擴容的時候,發(fā)現(xiàn)這么一段話: 執(zhí)行BGSAVE命令或者BGREWRITEAOF命令的...

    Coding01 評論0 收藏0
  • PHP 引用是個坑,請慎用

    摘要:發(fā)布時最大的變動是對象處理方式。這很容易被誤解為引用,但是存儲器的引用與引用是完全不同的概念。使用引用是一件不好的事情,除了引用本身不好,并且還會使性能下降這個事實外,使用引用這種方式會使得代碼難以維護。 showImg(https://segmentfault.com/img/remote/1460000014082570); 去年我參加了很多次會議,其中八次會議里我進行了相關(guān)發(fā)言,...

    dockerclub 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<