這里閱讀的php版本為PHP-7.1.0 RC3,閱讀代碼的平臺(tái)為linux

ZTS

我們會(huì)看到文章中有很多地方是:

#ifdef ZTS # define CG(v) ZEND_TSRMG(compiler_globals_id, zend_compiler_globals *, v) #else # define CG(v) (compiler_globals.v) extern ZEND_API struct _zend_compiler_globals compiler_globals; #endif

這里的ZTS是個(gè)什么概念呢。我們經(jīng)常使用的php都是運(yùn)行在單進(jìn)程,單線程環(huán)境,比如cgi,都是一個(gè)請(qǐng)求進(jìn)來(lái),就一個(gè)進(jìn)程為它服務(wù),當(dāng)請(qǐng)求結(jié)束了,進(jìn)程也就結(jié)束了。所以比如像全局變量,php內(nèi)核就沒有考慮多線程同時(shí)修改獲取的時(shí)候線程安全問(wèn)題。后來(lái),php漸漸也在往單進(jìn)程多線程服務(wù)器方向發(fā)展。那么這個(gè)時(shí)候,就會(huì)需要有一個(gè)層來(lái)專門處理線程安全問(wèn)題。這個(gè)就是TSRM(Thread Safe Resource Management)。

但是php默認(rèn)是關(guān)閉線程安全的。在編譯的時(shí)候,你可以指定參數(shù)開啟編譯一個(gè)線程安全版本的php。(--enable-maintainer-zts 選項(xiàng), Windows 平臺(tái)為 --enable-zts)這個(gè)就是這里的ZTS的由來(lái)。

比如上面的例子,CG(V) 在非線程安全下獲取的是全局結(jié)構(gòu)compiler_globals結(jié)構(gòu)的v屬性,在線程安全下獲取的是通過(guò)ZEND_TSREMG方法來(lái)獲取。

zend_try

我們會(huì)看到zend_try_catch相關(guān)的代碼如下:

zend_try {
        ...exec_try
    } zend_catch {
        ...exec_catch
    } zend_end_try();

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式