下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本文格式為Word版,下載可任意編輯——php內(nèi)核分析之ZTS和zendphp內(nèi)核分析之ZTS和zend-try
在學(xué)習(xí)PHP的同學(xué)對(duì)內(nèi)核有沒有疑問呢?下面是我用心為大家整理的php內(nèi)核分析之ZTS和zend_try,夢(mèng)想對(duì)大家有扶助,更多內(nèi)容請(qǐng)關(guān)注應(yīng)屆畢業(yè)生網(wǎng)!
這里閱讀的php版本為PHP-7.1.0RC3,閱讀代碼的平臺(tái)為linux
我們會(huì)看到文章中有好多地方是:
#ifdefZTS
#defineCGvZEND_TSRMGcompiler_globals_id,zend_compiler_globals*,v
#else
#defineCGvcompiler_globals.v
externZEND_APIstruct_zend_compiler_globalscompiler_globals;
#endif
這里的ZTS是個(gè)什么概念呢。我們經(jīng)常使用的php都是運(yùn)行在單進(jìn)程,單線程環(huán)境,譬如cgi,都是一個(gè)苦求進(jìn)來,就一個(gè)進(jìn)程為它服務(wù),當(dāng)苦求終止了,進(jìn)程也就終止了。所以譬如像全局變量,php內(nèi)核就沒有考慮多線程同時(shí)修改獲取的時(shí)候線程安好問題。后來,php逐漸也在往單進(jìn)程多線程服務(wù)器方向進(jìn)展。那么這個(gè)時(shí)候,就會(huì)需要有一個(gè)層來特意處理線程安好問題。這個(gè)就是TSRMThreadSafeResourceManagement。
但是php默認(rèn)是關(guān)閉線程安好的。在編譯的時(shí)候,你可以指定參數(shù)開啟編譯一個(gè)線程安好版本的php。--enable-maintainer-zts選項(xiàng),Windows平臺(tái)為--enable-zts這個(gè)就是這里的ZTS的由來。
譬如上面的例子,CGV在非線程安好下獲取的是全局布局compiler_globals布局的v屬性,在線程安好下獲取的是通過ZEND_TSREMG方法來獲取。
zend_try
我們會(huì)看到zend_try_catch相關(guān)的代碼如下:
zend_try
...exec_try
zend_catch
...exec_catch
zend_end_try;
把宏開展,我們可以看到約莫代碼如下:
\
JMP_BUF*__orig_bailout=EGbailout;\
JMP_BUF__bailout;\
\
EGbailout=__bailout;\
ifSETJMP__bailout==0
...exec_try
else\
EGbailout=__orig_bailout;
...exec_catch
\
EGbailout=__orig_bailout;\
這個(gè)是什么意思呢,需要先理解下setjmp和longjmp,這兩個(gè)函數(shù)是linux供給的方法。他們是組合起來使用的,達(dá)成協(xié)同程序的功能
#include
#include
jmp_bufenv;
voidfoo
printfbeforejmp\n;
intret=setjmpenv;
ifret==0
return;
else
printfreturn%d\n,ret;
printfafterjmp\n;
intmainintargc,char*argv[]
foo;
longjmpenv,999;
return0;
//輸出:
/*
beforejmp
return999
afterjmp
*/
上面的這個(gè)例子,setjmp的時(shí)候相當(dāng)于程序片段1把主動(dòng)權(quán)交出來,然后執(zhí)行ifret==0下面的程序,直到遇到longjmp,把執(zhí)行權(quán)還給了片段1,并且設(shè)置jmp_buf為999,片段1持續(xù)執(zhí)行,察覺了ret!=0,就輸出return999。
好了,回到這個(gè)程序:
\
JMP_BUF*__orig_bailout=EGbailout;\
JMP_BUF__bailout;\
\
EGbailout=__bailout;\
ifSETJMP__bailout==0
...exec_try
else\
EGbailout=__orig_bailout;
...exec_catch
\
EGbailout=__orig_bailout;\
這個(gè)程序里面的exec_try代碼段里面,在遇到錯(cuò)誤的時(shí)候,需要返回的時(shí)候,就會(huì)包含一個(gè)longjmp函數(shù)的調(diào)用。這樣,就形成了我們平日調(diào)用try...catch...finnal的'功能:
1先保存全局變量里面的bailout
2使用setjmp來做跳轉(zhuǎn)執(zhí)行下面的程序
3執(zhí)行exec_try
4假設(shè)exec_try這個(gè)代碼段里面有l(wèi)ongjmp,并且longjmp返回非0一般也切實(shí)非0,就執(zhí)行exec_catch
5結(jié)果,把全局變量里面的bailout恢復(fù)
這里可能會(huì)有兩個(gè)不解,假設(shè)exec_try里面沒有l(wèi)ongjmp怎么辦,那就直接只執(zhí)行了exec_try,就跳過exec_catch了。這個(gè)也是標(biāo)準(zhǔn)的用se
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030湘菜餐飲碳排放測(cè)算與綠色轉(zhuǎn)型路徑
- 2025-2030湘菜社區(qū)餐飲模式創(chuàng)新與便民服務(wù)實(shí)踐
- 2025-2030湘菜與酒水搭配消費(fèi)習(xí)慣及聯(lián)合營(yíng)銷機(jī)會(huì)
- 2025-2030消防監(jiān)控子系統(tǒng)行業(yè)市場(chǎng)供需研究及投資立體規(guī)劃研究資料
- 2025-2030消防安全設(shè)備制造行業(yè)技術(shù)標(biāo)準(zhǔn)及行業(yè)規(guī)范與安全保障分析
- 2025-2030消費(fèi)級(jí)電子產(chǎn)品屏下指紋識(shí)別技術(shù)成熟度評(píng)估
- 2025-2030消費(fèi)級(jí)無人機(jī)市場(chǎng)監(jiān)管政策變化對(duì)行業(yè)影響分析報(bào)告
- 2025-2030消費(fèi)級(jí)基因檢測(cè)市場(chǎng)教育現(xiàn)狀與產(chǎn)品差異化競(jìng)爭(zhēng)報(bào)告
- 2025-2030消費(fèi)級(jí)AR眼鏡顯示技術(shù)路線與用戶體驗(yàn)優(yōu)化分析報(bào)告
- 2025-2030消費(fèi)級(jí)AR眼鏡光學(xué)顯示方案對(duì)比與沉浸式體驗(yàn)優(yōu)化戰(zhàn)略咨詢報(bào)告
- 2024工程項(xiàng)目工序質(zhì)量控制標(biāo)準(zhǔn)
- 2024-2030年中國(guó)海南省廢水污染物處理資金申請(qǐng)報(bào)告
- 新能源汽車技術(shù) SL03維修手冊(cè)(第4章)-電氣-4.2.2~4.2.12電器集成
- 教科版科學(xué)教材培訓(xùn)
- 甲狀腺的中醫(yī)護(hù)理
- 商住樓項(xiàng)目總體規(guī)劃方案
- 2022儲(chǔ)能系統(tǒng)在電網(wǎng)中典型應(yīng)用
- 互聯(lián)網(wǎng)+物流平臺(tái)項(xiàng)目創(chuàng)辦商業(yè)計(jì)劃書(完整版)
- 家庭學(xué)校社會(huì)協(xié)同育人課件
- IABP主動(dòng)脈球囊反搏課件
- 基于python-的車牌識(shí)別
評(píng)論
0/150
提交評(píng)論