一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PHP7在內(nèi)存方面你是否知道都進(jìn)行了哪些優(yōu)化

冬至配餃子 ? 來(lái)源:開(kāi)發(fā)內(nèi)功修煉 ? 作者:張彥飛allen ? 2022-08-30 17:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前面我們討論了內(nèi)存的工作原理,也進(jìn)行了一些性能相關(guān)的測(cè)試。那么今天開(kāi)始我們來(lái)看幾個(gè)在實(shí)踐中的應(yīng)用。首先我們先從PHP開(kāi)始。2015年,PHP7的發(fā)布可以說(shuō)是在技術(shù)圈里引起了不小的轟動(dòng),因?yàn)樗膱?zhí)行效率比PHP5直接翻了一倍。PHP7在內(nèi)存方面,你是否知道作者都進(jìn)行了哪些優(yōu)化?幾個(gè)核心結(jié)構(gòu)體的改進(jìn)只是表面上看起來(lái)優(yōu)化的幾個(gè)字節(jié)那么簡(jiǎn)單?讓我們從幾個(gè)核心的數(shù)據(jù)結(jié)構(gòu)改進(jìn)開(kāi)始看起。

1 PHP7zval的變化

1、php5.3中的zval:

pYYBAGMN0taADI7ZAACph_e53O8634.png

我們這里只討論64位操作系統(tǒng)下的情況。該zval_struct結(jié)構(gòu)體中的由四個(gè)成員構(gòu)成,其中zvalue_value稍微復(fù)雜一些,是一個(gè)聯(lián)合體。聯(lián)合體中最長(zhǎng)的成員是一個(gè)指針加一個(gè)int,8+4=12字節(jié)。但是默認(rèn)情況下,會(huì)進(jìn)行內(nèi)存對(duì)齊,故zval_struct會(huì)占用16字節(jié)。那么。

_zval_struct總的字節(jié) = value(16)+ refcount__gc(4)+ type(1)+ is_ref__gc(1)= 占用22字節(jié)。

最后再考慮下內(nèi)存對(duì)齊,實(shí)際占用24字節(jié)。(如果算的有點(diǎn)暈話,感興趣的同學(xué)可以寫段簡(jiǎn)單的測(cè)試代碼,使用sizeof查看一下)

2、PHP7.2中的zval

poYBAGMN0uyAUol1AADs2EZskZs450.png

7.2中的zval_struct結(jié)構(gòu)體里由3個(gè)成員構(gòu)成,其中zend_value看起來(lái)比較復(fù)雜,實(shí)際上只是一個(gè)8字節(jié)的聯(lián)合體。u1也是一個(gè)聯(lián)合體,占用是4個(gè)字節(jié)。u2也一樣。這樣zval_struct就實(shí)際占用16個(gè)字節(jié)。

2 PHP7 HashTable的變化

1、PHP5.3里的HashTable:

pYYBAGMN0v-AGU2NAACNlGKBu8M639.png

在5.3里HashTable就是一個(gè)大struct, 有點(diǎn)小復(fù)雜,我們拆開(kāi)了細(xì)說(shuō),

uint nTableSize 4字節(jié)

uint nTableMask 4字節(jié)

uint nNumOfElements 4字節(jié),

ulong nNextFreeElement 8字節(jié) 注意這前面的4個(gè)字節(jié)會(huì)被浪費(fèi)掉,因?yàn)閚NextFreeElement的開(kāi)始地址需要對(duì)齊

Bucket *pInternalPointer 8字節(jié)

Bucket *pListHead 8字節(jié)

Bucket *pListTail 8字節(jié)

Bucket **arBuckets 8字節(jié)

dtor_func_t pDestructor 8字節(jié)

zend_bool persistent 1字節(jié)

unsigned char nApplyCoun 1字節(jié)

zend_bool bApplyProtection 1字節(jié)

最終,總字節(jié)數(shù) = 4+4+4+4(nNextFreeElement前面這四個(gè)字節(jié)會(huì)留空)+8+8+8+8+8+8+1+1+1 = 67字節(jié)。再加上結(jié)構(gòu)體本身要對(duì)齊到8的整數(shù)倍,所以實(shí)際占用72字節(jié)。

2、PHP7.2里的HashTable:

pYYBAGMN0xKAQDrkAACWEr2NQKE768.png

在7.2里HashTable

zend_refcounted_h gc 看起來(lái)唬人,實(shí)際就是個(gè)long,占用8字節(jié)

union... u 占用4字節(jié)

uint32_t 占用4字節(jié)

Bucket* 指針占用8字節(jié)

uint32_t nNumUsed 占用4字節(jié)

uint32_t nNumOfElements 占用4字節(jié)

uint32_t nTableSize 占用4字節(jié)

uint32_t nInternalPointer 占用4字節(jié)

zend_long nNextFreeElement 占用8字節(jié)

dtor_func_t pDestructor 占用8字節(jié)

總占用

字節(jié)數(shù) = 8+4+4+8+4+4+4+4+8+8 = 56字節(jié),并且正好達(dá)到了內(nèi)存對(duì)齊的狀態(tài),沒(méi)有額外的浪費(fèi)。

另外還有PHP源代碼里經(jīng)常出鏡的Buckets也從72下降到了32字節(jié),這里我就不翻源代碼了。

3 優(yōu)化思想精髓

當(dāng)當(dāng)當(dāng),敲黑板,重點(diǎn)來(lái)了!我們看了兩個(gè)核心數(shù)據(jù)結(jié)構(gòu)的結(jié)構(gòu)體變化,這上面的優(yōu)化都是什么含義呢?拿HashTable舉例,貌似從72字節(jié)優(yōu)化到了56字節(jié),這內(nèi)存節(jié)約的也不是特別多嘛,才20%多而已!但這中間其實(shí)隱藏了兩個(gè)較深層次優(yōu)化思路:

第一、你是否記得我們前面CPU在向內(nèi)存要數(shù)據(jù)的時(shí)候是以Cache Line為單位進(jìn)行的,而我們說(shuō)過(guò)Cache Line的大小就是64字節(jié)?;剡^(guò)頭來(lái)看HashTable,在7.2里的56字節(jié),只需要CPU向內(nèi)存進(jìn)行一次Cache Line大小的burst IO,就夠了。而在5.3里的72字節(jié),雖然只比Cache Line大了那么一丟丟,但是對(duì)不起,必須得進(jìn)行兩次burst IO才可以。所以,在計(jì)算機(jī)里,56字節(jié)相對(duì)72字節(jié)實(shí)際上是翻倍的性能提升??!

第二、CPU的L1、L2、L3的容量是固定的幾十K或者幾十M。假設(shè)Cache的都是HashTable,那么Cache容量不變的條件下,能Cache住的HashTable將會(huì)翻倍,緩存命中率提升一大截。要知道L1命中后只需要1ns多一點(diǎn)的耗時(shí),而如果穿透到內(nèi)存的話可能就需要40多納秒的延時(shí)了,整整差了幾十倍。

所以PHP內(nèi)核的作者大牛深諳CPU與內(nèi)存的工作原理,表面上看起來(lái)只是幾個(gè)字節(jié)的節(jié)約,但是實(shí)際上爆發(fā)出了巨大的性能提升?。?br />


審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11083

    瀏覽量

    217188
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3125

    瀏覽量

    75295
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7154

    瀏覽量

    125647
  • PHP
    PHP
    +關(guān)注

    關(guān)注

    0

    文章

    454

    瀏覽量

    27562
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    TPS62684 1600mA 高效降壓轉(zhuǎn)換器,針對(duì)小尺寸解決方案進(jìn)行了優(yōu)化數(shù)據(jù)手冊(cè)

    進(jìn)行了優(yōu)化, 支持高達(dá) 1600mA 的負(fù)載電流,并允許使用低成本的片式電感器和電容器。 該器件的輸入電壓范圍為 3.25V 至 5.5V,支持由鋰離子供電的應(yīng)用 電池以及 5V 導(dǎo)軌。
    的頭像 發(fā)表于 06-25 13:41 ?202次閱讀
    TPS62684 1600mA 高效降壓轉(zhuǎn)換器,針對(duì)小尺寸解決方案<b class='flag-5'>進(jìn)行了</b><b class='flag-5'>優(yōu)化</b>數(shù)據(jù)手冊(cè)

    HarmonyOS優(yōu)化應(yīng)用內(nèi)存占用問(wèn)題性能優(yōu)化

    一、使用purgeable優(yōu)化C++內(nèi)存 Purgeable Memory是HarmonyOS中native層常用的內(nèi)存管理機(jī)制,可用于圖像處理的Bitmap、流媒體應(yīng)用的一次性數(shù)據(jù)、圖片等
    發(fā)表于 05-24 17:20

    HarmonyOS優(yōu)化應(yīng)用內(nèi)存占用問(wèn)題性能優(yōu)化

    一、 概述 用戶功能的不斷增強(qiáng),應(yīng)用越來(lái)越復(fù)雜,占用的內(nèi)存也在不斷膨脹,而內(nèi)存作為系統(tǒng)的稀缺資源比較有限,當(dāng)應(yīng)用程序占用過(guò)多內(nèi)存時(shí),系統(tǒng)可能會(huì)頻繁進(jìn)行內(nèi)存回收和重新分配,導(dǎo)致應(yīng)用程序的
    發(fā)表于 05-21 11:27

    SOLIDWORKS?2025在電氣設(shè)計(jì)與仿真方面進(jìn)行了優(yōu)化

    隨著科技的飛速發(fā)展,工程設(shè)計(jì)領(lǐng)域?qū)﹄姎庠O(shè)計(jì)與仿真工具的要求日益提高。SOLIDWORKS作為三維CAD設(shè)計(jì)和仿真分析軟件,始終致力于通過(guò)技術(shù)創(chuàng)新推動(dòng)行業(yè)發(fā)展。2025年推出的SOLIDWORKS?2025版本,在電氣設(shè)計(jì)與仿真方面實(shí)現(xiàn)了諸多突破和優(yōu)化,為用戶提供了更加有效
    的頭像 發(fā)表于 04-25 10:46 ?331次閱讀
    SOLIDWORKS?2025在電氣設(shè)計(jì)與仿真<b class='flag-5'>方面</b><b class='flag-5'>進(jìn)行了</b><b class='flag-5'>優(yōu)化</b>

    iMX8MPlus SoC M7核心是否需要單獨(dú)的RAM內(nèi)存?

    對(duì)于 iMX8MPlus SoC ,M7 核心是否需要單獨(dú)的 RAM 內(nèi)存?或者是否有用于 M7內(nèi)核的內(nèi)部 SRAM?
    發(fā)表于 03-28 08:03

    使用ADS1198-FE下載了軟件按照說(shuō)明進(jìn)行了調(diào)試,出現(xiàn)了兩個(gè)問(wèn)題求解決

    使用ADS1198-FE,下載了軟件按照說(shuō)明進(jìn)行了調(diào)試,但出現(xiàn)了兩個(gè)問(wèn)題: 1、工頻干擾特別大,淹沒(méi)了有用信號(hào)。后來(lái)我直接將通道2與信號(hào)發(fā)生器相接看波形,依舊有非常大的干擾,幾乎看不到波形。 2
    發(fā)表于 02-07 08:24

    hyper 內(nèi)存,Hyper內(nèi)存:如何監(jiān)控與優(yōu)化hyper-v虛擬機(jī)的內(nèi)存使用

    :如何監(jiān)控與優(yōu)化hyper-v虛擬機(jī)的內(nèi)存使用。 ? ?在虛擬化環(huán)境中,合理監(jiān)控和優(yōu)化Hyper-V虛擬機(jī)的內(nèi)存使用對(duì)于提升性能和資源利用率至關(guān)重要。本文將詳細(xì)介紹如何監(jiān)控Hyper-
    的頭像 發(fā)表于 01-24 14:15 ?1120次閱讀
    hyper <b class='flag-5'>內(nèi)存</b>,Hyper<b class='flag-5'>內(nèi)存</b>:如何監(jiān)控與<b class='flag-5'>優(yōu)化</b>hyper-v虛擬機(jī)的<b class='flag-5'>內(nèi)存</b>使用

    高壓SiC針對(duì)電動(dòng)汽車長(zhǎng)途卡車運(yùn)輸中的兆瓦級(jí)充電進(jìn)行了優(yōu)化

    電子發(fā)燒友網(wǎng)站提供《高壓SiC針對(duì)電動(dòng)汽車長(zhǎng)途卡車運(yùn)輸中的兆瓦級(jí)充電進(jìn)行了優(yōu)化.pdf》資料免費(fèi)下載
    發(fā)表于 01-22 15:38 ?0次下載
    高壓SiC針對(duì)電動(dòng)汽車長(zhǎng)途卡車運(yùn)輸中的兆瓦級(jí)充電<b class='flag-5'>進(jìn)行了</b><b class='flag-5'>優(yōu)化</b>

    FPGA通過(guò)SPI對(duì)DAC進(jìn)行了配置,用頻譜儀測(cè)不到輸出是怎么回事?

    FPGA通過(guò)SPI對(duì)DAC進(jìn)行了配置,確定配置時(shí)序正確,寫了組測(cè)試的單音數(shù)據(jù),data,clk,frame發(fā)的都對(duì),用頻譜儀測(cè)不到輸出,可能是哪些地方不對(duì)呢?求助大神
    發(fā)表于 12-09 06:35

    SOLIDWORKS 2025界面布局的優(yōu)化

    SOLIDWORKS作為一款廣泛應(yīng)用于工程設(shè)計(jì)領(lǐng)域的CAD軟件,其每一次更新都備受矚目。2025版本不僅在功能上進(jìn)行了諸多增強(qiáng),還在界面布局上進(jìn)行了顯著的優(yōu)化,為用戶帶來(lái)了更加直觀、易用和有效的設(shè)計(jì)體驗(yàn)
    的頭像 發(fā)表于 12-03 16:12 ?668次閱讀

    內(nèi)存藍(lán)屏死機(jī)?內(nèi)存驗(yàn)貨指南值得擁有

    在內(nèi)存領(lǐng)域,穩(wěn)定性無(wú)疑是用戶最需要關(guān)注的指標(biāo)。由于身負(fù)整機(jī)數(shù)據(jù)交換的重任,因此其品質(zhì)極大程度上決定著使用過(guò)程中,是否會(huì)出現(xiàn)藍(lán)屏、死機(jī)等問(wèn)題。本期我們將以墨云藏境系列DDR5 RGB國(guó)風(fēng)內(nèi)存為例,為
    的頭像 發(fā)表于 12-02 15:38 ?608次閱讀
    新<b class='flag-5'>內(nèi)存</b>藍(lán)屏死機(jī)?<b class='flag-5'>內(nèi)存</b>驗(yàn)貨指南<b class='flag-5'>你</b>值得擁有

    如何優(yōu)化RAM內(nèi)存使用

    :使用任務(wù)管理器查看當(dāng)前運(yùn)行的程序和服務(wù),關(guān)閉那些不需要的。 禁用啟動(dòng)程序 :減少開(kāi)機(jī)啟動(dòng)項(xiàng),只保留必要的程序。 2. 優(yōu)化操作系統(tǒng)設(shè)置 調(diào)整虛擬內(nèi)存 :合理設(shè)置虛擬內(nèi)存,避免過(guò)多占用硬盤空間。 清理磁盤 :定期
    的頭像 發(fā)表于 11-11 09:58 ?1463次閱讀

    這些電源常用仿真軟件,知道嗎?

    諧振變換器電路進(jìn)行了仿真建模,感興趣的工程師們可以去回顧一下,這里就不贅述了。 常用仿真軟件 在進(jìn)行電源設(shè)備設(shè)計(jì)仿真時(shí),會(huì)涉及到電路、電磁、熱學(xué)、力學(xué)方面的仿真。 電路仿真: 通過(guò)仿真軟件將電路的元件
    發(fā)表于 10-25 14:20

    TLV320AIC3106IRGZT隨著PGA音量的抬高是不是同時(shí)將底噪也進(jìn)行了放大?

    我的問(wèn)題如下 1. 隨著PGA音量的抬高是不是同時(shí)將底噪也進(jìn)行了放大? 2. 這樣的放大是不是芯片固有的現(xiàn)象?能否進(jìn)一步降低頻譜底噪?
    發(fā)表于 10-24 06:15

    石墨烯基導(dǎo)電油墨具有良好的滲透性和低阻抗,針對(duì) RFID天線性能進(jìn)行了優(yōu)

    “電子絲網(wǎng)印刷技術(shù)”是指電子信息技術(shù)與具有歷史的絲網(wǎng)印刷技術(shù)相結(jié)合而產(chǎn)生的嶄新技術(shù)。Haydale這款石墨烯墨水除了優(yōu)異的柔韌性、附著力和兼容性外,用于 RFID 產(chǎn)品還能夠傳輸和接收特定的無(wú)線電頻率,具有好的滲透性和低阻抗,針對(duì) RFID天線性能進(jìn)行了優(yōu)化
    的頭像 發(fā)表于 09-13 15:26 ?793次閱讀
    石墨烯基導(dǎo)電油墨具有良好的滲透性和低阻抗,針對(duì) RFID天線性能<b class='flag-5'>進(jìn)行了</b>優(yōu)