色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

為什么php不適合做計(jì)算密集型業(yè)務(wù)?

PHP即“超文本預(yù)處理器”,是一種通用開源腳本語言。PHP是在服務(wù)器端執(zhí)行的腳本語言,與C語言類似,是常用的網(wǎng)站編程語言。PHP獨(dú)特的語法混合了C、Java、Perl以及PHP自創(chuàng)的語法。利于學(xué)習(xí),使用廣泛,主要適用于Web開發(fā)領(lǐng)域。

1.優(yōu)點(diǎn):開源免費(fèi)性快捷性[程序開發(fā)快,運(yùn)行快,技術(shù)本身學(xué)習(xí)快]

1)跨平臺(tái),性能優(yōu)越,跟Linux/Unix結(jié)合別跟Windows結(jié)合性能強(qiáng)45%,并且和很多免費(fèi)的平臺(tái)結(jié)合非常省錢,比如LAMP(Linux/Apache/Mysql/PHP)或者FAMP(FreeBSD/Apache/Mysql/PHP)結(jié)合,或者數(shù)據(jù)應(yīng)用夠大可以考慮換PostgreSQL或者Oracle,支持N種數(shù)據(jù)庫。(N>=10)

2)語法簡(jiǎn)單,如果有學(xué)習(xí)C和Perl的很容易上手,并且跟ASP有部分類似。有成熟的開發(fā)工具,比如NuPHPed,或者ZendStudio等等,再Linux平臺(tái)下可以使用Eclipse等等。

3)目前主流技術(shù)都支持,比如WebService、Ajax、XML等等,足夠應(yīng)用。

4)有比較完整的支持,比如使用ADODB或者PEAR::DB做數(shù)據(jù)庫抽象層,用Smarty或者smarttemplate做模板層,如果是PHP5.1的話,還能夠使用PDO(PHPDataObject)來訪問數(shù)據(jù)庫。

5)有很多成熟的框架,比如支持MVC的框架:phpMVC,支持類似ASP.net的事件驅(qū)動(dòng)的框架:Prado,支持類似RubyOnRails的快速開發(fā)的框架:Cake等等,足夠滿足你的應(yīng)用需求。

6)PHP5已經(jīng)有成熟的面向?qū)ο篌w系,能夠適應(yīng)基本的面向?qū)ο笠蟆_m合開發(fā)大型項(xiàng)目。

7)有成熟的社區(qū)來支持PHP的開發(fā)。

8)目前已經(jīng)很多大型應(yīng)用都是使用PHP,比如淘寶網(wǎng)、Yahoo、163、Sina等等大型門戶,很多選用PHP來作為他們的開發(fā)語言,所以大型門戶都能夠選用它,我想足夠能夠你的使用了。

9)有很多開源的框架或開源的系統(tǒng)可以使用,比如比較知名的開源框架有ZendFramework、CakePHP、CodeIgniter、symfony等,開源論壇有Discuz!、Phpwind等,開源博客WordPress,開源網(wǎng)店系統(tǒng)如Ecshop、ShopEx等,開源的SNS系統(tǒng)如UCHome、ThinkSNS等。

10)使用成本低(linuxapachemysqlphp內(nèi)核)

2.缺點(diǎn)

1)函數(shù)命名不規(guī)范駝峰法和下滑線,傳參位置不一你知道的

2)單線程;PHP本身,一直以來php就是個(gè)單進(jìn)程的程序;雖然php的pthreads擴(kuò)展早就有了。但是它不夠穩(wěn)定,運(yùn)行運(yùn)行著就會(huì)莫名其妙的自己掛掉;php的擴(kuò)展都是C寫的,這也就意味著任何一個(gè)擴(kuò)展出現(xiàn)線程競(jìng)爭(zhēng)資源控制問題都能讓整個(gè)掛掉

3)核心異步網(wǎng)絡(luò)不支持(當(dāng)然在linux只有同步非阻塞網(wǎng)絡(luò)模型)。卻少了這個(gè)使得很難開發(fā)一個(gè)能夠承受大并發(fā)的網(wǎng)絡(luò)應(yīng)用。傳統(tǒng)的網(wǎng)絡(luò)模型和io都阻塞的。這樣基本的編程的做法就是一個(gè)進(jìn)程(或者線程)響應(yīng)一個(gè)用戶鏈接請(qǐng)求。因此無法完成像實(shí)時(shí)網(wǎng)游那樣需要成千上萬網(wǎng)絡(luò)連接的任務(wù)。盡管php也有Libevent、eio擴(kuò)展對(duì)此算是某種程度上面的彌補(bǔ),但是感覺都不是那么完善

4)只支持web開發(fā),不方便做.exe文件,不方便做桌面應(yīng)用程序.不方便做手機(jī)程序.

5)不適合做爬蟲、自動(dòng)運(yùn)行腳本.科學(xué)運(yùn)算項(xiàng)目,這語言基本構(gòu)架就不適合,雖然有很多方法實(shí)現(xiàn)。

6)后期維護(hù)困難。后期提速空間局限性較大。

在對(duì)PHP有一個(gè)大致的認(rèn)識(shí)以后,我們來了解一下為什么說PHP慢?

PHP的慢是相對(duì)于C/C++級(jí)別的語言來說,事實(shí)上,PHP語言最初的設(shè)計(jì),就不是用來解決計(jì)算密集型的應(yīng)用場(chǎng)景。我們可以這樣粗略理解為,PHP為了提升開發(fā)效率,而犧牲了執(zhí)行效率。

我們知道PHP一個(gè)很大的特點(diǎn),就是弱類型特性,也就是說,我可以隨意定義一個(gè)變量,然后給它隨意賦值為各種類型的數(shù)據(jù)。以一個(gè)int整型數(shù)字為例子,在C語言中:

intnum=200;//通常是4字節(jié)

但是,如果是PHP定義了一個(gè)同樣的變量,實(shí)際對(duì)應(yīng)的存儲(chǔ)結(jié)構(gòu)則是:

這個(gè)結(jié)構(gòu)體將會(huì)占據(jù)遠(yuǎn)比C變量多得多的內(nèi)存,PHP中定義方式如下:

$a=200;//這變量將實(shí)際占用對(duì)比C變量很多倍的存儲(chǔ)空間。

其實(shí)對(duì)PHP來說,無論存儲(chǔ)什么類型的數(shù)據(jù),都是用上述“通殺”的結(jié)構(gòu)體實(shí)現(xiàn)。為了兼容PHP程序員的變量類型“亂入”,PHP做到了對(duì)開發(fā)者的友好,但是對(duì)執(zhí)行引擎很殘酷。單個(gè)變量?jī)?nèi)存消耗可能還不明顯,一旦用到PHP的數(shù)組等,則復(fù)雜度指數(shù)上升(數(shù)組的實(shí)現(xiàn)是HashTable)。然后,Zend引擎執(zhí)行時(shí),將這些PHP代碼編譯為opcode(PHP的中間字節(jié)碼,格式有點(diǎn)類似于匯編),由Zend引擎逐行解釋執(zhí)行。

無論是字符串的連接操作,還是數(shù)組的簡(jiǎn)單修改等,幾乎都是“PHP程序員一句話,Zend引擎跑斷腿”的節(jié)奏。因此,同樣的操作,對(duì)比C來說,PHP消耗了更多的CPU和內(nèi)存等系統(tǒng)資源。除此之外,還有內(nèi)存自動(dòng)回收、變量類型判斷等等,都會(huì)增加系統(tǒng)資源的消耗。

例如,我用純PHP實(shí)現(xiàn)的快速排序函數(shù)和原生sort函數(shù),排序10000個(gè)整型數(shù)字,來做一個(gè)耗時(shí)對(duì)比,結(jié)果如下:

原生的sort耗時(shí)3.44ms,而我們自己實(shí)現(xiàn)的PHP函數(shù)sort則是68.79ms。我們發(fā)現(xiàn),兩者執(zhí)行效率差距巨大。我的測(cè)試方式,是計(jì)算函數(shù)執(zhí)行前后的時(shí)間間隔,而不是整個(gè)PHP腳本從啟動(dòng)到結(jié)束的時(shí)間。PHP腳本啟動(dòng)和關(guān)閉過程,本身有著一系列的初始化和清理工作,也會(huì)占據(jù)不少的耗時(shí)。

通常情況下,PHP執(zhí)行效率的排行是:

最快的是PHP語言結(jié)構(gòu)(isset、echo等),PHP語言的一部分(它們根本不是函數(shù))。

然后比較快的就是PHP的原生和拓展函數(shù)。PHP拓展,基于ZendAPI之上,用C實(shí)現(xiàn)的功能,執(zhí)行效率和C/Java是屬于同一個(gè)數(shù)量級(jí)的。

真正慢的就是,我們通過PHP自己寫的代碼和函數(shù)。例如,假如我們使用的比較重的純PHP實(shí)現(xiàn)的框架,因?yàn)榭蚣鼙旧淼哪K很多,所以,會(huì)明顯拖累語言層面的執(zhí)行效率,同時(shí)占據(jù)更多的內(nèi)存。(國內(nèi)的Yaf框架,以拓展的方式實(shí)現(xiàn),因此執(zhí)行效率遠(yuǎn)快于純PHP寫的框架。

在一般情況下,我們并不推薦用過PHP實(shí)現(xiàn)邏輯復(fù)雜計(jì)算類型的功能,尤其是Web系統(tǒng)流量比較大的場(chǎng)景下。因此,PHP程序員應(yīng)該對(duì)PHP的各種原生函數(shù)和各類拓展有一個(gè)比較廣泛的了解,在具體的功能實(shí)現(xiàn)場(chǎng)景中,尋求更原生的解決方案(原生接口或者拓展),而不是自己寫一堆復(fù)雜的PHP代碼來實(shí)現(xiàn)這類型功能。

如果有足夠的PHP拓展開發(fā)實(shí)力,將這類型業(yè)務(wù)功能重寫為一個(gè)PHP拓展,也會(huì)大幅提升代碼的執(zhí)行效率。這是一個(gè)非常不錯(cuò)的方式,也被廣泛應(yīng)用PHP優(yōu)化中。但是,自己編寫的PHP業(yè)務(wù)拓展的缺點(diǎn)也很明顯:

拓展開發(fā)耗時(shí)比較長(zhǎng),需求變更的時(shí)候修改也復(fù)雜,寫得不好可能會(huì)影響Web服務(wù)穩(wěn)定性。(例如,在Apache的worker模式下,多線程場(chǎng)景下掛掉,會(huì)影響同一個(gè)進(jìn)程下的其他正常子線程。如果是多線程的Web模式,編寫拓展還需要支持線程安全)

拓展在PHP版本升級(jí)的時(shí)候,可能需要做額外的兼容工作。

人員變動(dòng)后的維護(hù)和接手成本也比較高。

實(shí)際上,在互聯(lián)網(wǎng)一線企業(yè)中,更常見的解決方案,并非增加PHP拓展,而用C/C獨(dú)立寫一個(gè)服務(wù)server,然后PHP通過socket和服務(wù)server通信來完成業(yè)務(wù)處理,并不將PHP本身和業(yè)務(wù)耦合在一起。

不過,Web服務(wù)大部分的性能瓶頸都在網(wǎng)絡(luò)傳輸和其他服務(wù)server的耗時(shí)上(例如MySQL等),PHP執(zhí)行的耗時(shí)在整體耗時(shí)的占用比例非常小,所以從業(yè)務(wù)角度來說,影響可能并不明顯。