我看到PHP的不同二進(jìn)制文件,如非線程或線程安全?這是什么意思?這些套餐有什么區(qū)別?
解決方法:
并發(fā)方法需要的背景:
不同的Web服務(wù)器實(shí)現(xiàn)了并行處理傳入HTTP請(qǐng)求的不同技術(shù).一種非常流行的技術(shù)是使用線程 – 也就是說,Web服務(wù)器將為每個(gè)傳入請(qǐng)求創(chuàng)建/專用一個(gè)線程. Apache HTTP Web服務(wù)器支持多種處理請(qǐng)求的模型,其中一種(稱為worker MPM)使用線程.但它支持另一種稱為prefork MPM的并發(fā)模型,它使用進(jìn)程 – 也就是說,Web服務(wù)器將為每個(gè)請(qǐng)求創(chuàng)建/專用一個(gè)進(jìn)程.
還有其他完全不同的并發(fā)模型(使用異步套接字和I / O),以及將兩個(gè)甚至三個(gè)模型混合在一起的模型.為了回答這個(gè)問題,我們只關(guān)注上面的兩個(gè)模型,并以Apache HTTP服務(wù)器為例.
關(guān)于PHP如何與Web服務(wù)器“集成”的背景知識(shí):
PHP本身不響應(yīng)實(shí)際的HTTP請(qǐng)求 – 這是Web服務(wù)器的工作.因此,我們將Web服務(wù)器配置為將請(qǐng)求轉(zhuǎn)發(fā)到PHP進(jìn)行處理,然后接收結(jié)果并將其發(fā)送回用戶.有多種方法可以使用PHP鏈接Web服務(wù)器.對(duì)于Apache HTTP Server,最流行的是“mod_php”.這個(gè)模塊實(shí)際上是PHP本身,但是作為Web服務(wù)器的模塊編譯,因此它被加載到其中.
還有其他方法可以將PHP與Apache和其他Web服務(wù)器鏈接起來,但mod_php是最受歡迎的方法,也可用于回答您的問題.
您之前可能不需要了解這些細(xì)節(jié),因?yàn)橥泄芄竞虶NU / Linux發(fā)行版都為我們準(zhǔn)備了一切.
現(xiàn)在,關(guān)于你的問題!
由于使用mod_php,PHP會(huì)直接加載到Apache中,如果Apache要使用其工作MPM(即使用線程)處理并發(fā),那么PHP必須能夠在同一個(gè)多線程環(huán)境中運(yùn)行 – 這意味著,PHP必須是安全的,能夠正確地與Apache玩球!
此時(shí),您應(yīng)該考慮“好吧,所以如果我使用多線程Web服務(wù)器并且我要將PHP嵌入其中,那么我必須使用PHP的線程安全版本”.這是正確的思考.然而,正如它發(fā)生的那樣,PHP的線程安全is highly disputed.如果你真的知道你在做什么,這是一個(gè)使用.
最后的筆記
如果您想知道,我個(gè)人的建議是,如果您有選擇,不要在多線程環(huán)境中使用PHP!
說到基于Unix的環(huán)境,我想說幸運(yùn)的是,如果你要將PHP與Apache Web服務(wù)器一起使用,你只需要考慮這個(gè),在這種情況下,建議你使用Apache的prefork MPM(其中不使用線程,因此,PHP線程安全并不重要)我所知道的所有GNU / Linux發(fā)行版都會(huì)在您通過其軟件包系統(tǒng)安裝Apache PHP時(shí)為您做出決定,甚至沒有提示您一個(gè)選擇.如果您打算使用其他網(wǎng)絡(luò)服務(wù)器,例如nginx或lighttpd,則無論如何都無法將PHP嵌入其中.您將看到使用FastCGI或類似的東西,它在不同的模型中工作,其中PHP完全在Web服務(wù)器之外,其中多個(gè)PHP進(jìn)程用于通過例如回復(fù)請(qǐng)求來回答請(qǐng)求. FastCGI的.對(duì)于這種情況,線程安全也無所謂.要查看您的網(wǎng)站使用的版本,請(qǐng)放置一個(gè)包含<?php phpinfo(); ?>在您的站點(diǎn)上,查找Server API條目.這可以說像CGI / FastCGI或Apache 2.0 Handler.如果你也看一下PHP的命令行版本 – 線程安全無關(guān)緊要.最后,如果線程安全無關(guān)緊要,那么您應(yīng)該使用哪個(gè)版本 – 線程安全還是非線程安全?坦率地說,我沒有科學(xué)的答案!但我猜測(cè)非線程安全版本更快和/或更少的錯(cuò)誤,否則他們會(huì)提供線程安全的版本,而不是打擾給我們的選擇!
來源:https://www.icode9.com/content-1-452801.html聯(lián)系客服