php作为弱语言是最棒的~哈哈哈哈
生活随笔
收集整理的這篇文章主要介紹了
php作为弱语言是最棒的~哈哈哈哈
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
手動(dòng)前言:最近項(xiàng)目出現(xiàn)不固定時(shí)間段兩分鐘的504啊,上服務(wù)器調(diào)日志發(fā)現(xiàn)是MYSQL最大連接數(shù)問(wèn)題,數(shù)據(jù)庫(kù)是跟別的部門共享的,應(yīng)該是有別的部門在跑數(shù)據(jù),拉高了數(shù)據(jù)庫(kù)服務(wù)器的CPU,額!有運(yùn)維,DBA問(wèn)我,你設(shè)置的PHP連接池多少,我說(shuō)PHP對(duì)MYSQL沒(méi)有連接池概念,但可以用第三方擴(kuò)展可以做到,比如swoole,立馬4-5張嘴說(shuō),怎么可能,JAVA都有,領(lǐng)導(dǎo)也說(shuō)我,不可能吧,要不,你去查查資料!!!哎!最后我找了一些資料,發(fā)給各位爺,證明確定沒(méi)有,他們才說(shuō),不好意思,我對(duì)PHP不太了解,對(duì)JAVA了解一點(diǎn)!!!
我又能說(shuō)什么呢~~~各位爺開(kāi)心就好~
一。如何理解php是弱類型語(yǔ)言 1.從變量角度:在聲明一個(gè)變量不需要聲明其類型,這事PHP的特色,因?yàn)樗唤o了底層 底層的變量存儲(chǔ)是在一個(gè)zval結(jié)構(gòu)里,聲明一個(gè)變量會(huì)把所有類型都考慮到并開(kāi)辟空間,同種類型默認(rèn)用最大限度聲明(int用long,float用double),這樣絕對(duì)滿足的所有變量的需求 2.從運(yùn)算的角度:底層會(huì)根據(jù)你當(dāng)前變量類型做轉(zhuǎn)換并運(yùn)算,并且返回結(jié)果做類型轉(zhuǎn)換(string+string=int,float+string=float,sting('')==int0...);數(shù)組也可以加減參與運(yùn)算; (從存儲(chǔ)結(jié)構(gòu)理解php空,null,0'0'false:http://blog.csdn.net/ty_hf/article/details/70217267)
二。php生命周期: 主要分為3個(gè)階段,開(kāi)始階段,運(yùn)行階段,結(jié)束階段 開(kāi)始階段: 1.module_init: 初始化全局變量,引入standard標(biāo)準(zhǔn)庫(kù),加載php.ini。 啟動(dòng)apache就經(jīng)歷一次;加了dll或.so擴(kuò)展,php.ini發(fā)生改變,重啟nginx或apache的原因; 2.request_init:對(duì)全局變量賦值,激活zend引擎 運(yùn)行階段: 3.run:詞法分析-語(yǔ)法分析-opcode 訪問(wèn)腳本,程序員們最熟悉的步驟了,你寫的代碼。 結(jié)束階段: 4.request_shutdown:銷毀使用的函數(shù)變量,回收內(nèi)存 碰到die or exit自動(dòng)進(jìn)入此階段并且調(diào)用析構(gòu)方法? 5.module_shutdown:各模塊最后一次釋放內(nèi)存 (PHP內(nèi)核--生命周期:http://blog.csdn.net/ty_hf/article/details/52877759)
三。變量的分離改變 變量8種類型:int string array float bool null resource object 存儲(chǔ)在zval_value(存儲(chǔ)變量的值)zval_struct(存儲(chǔ)變量的類型引用等) 寫時(shí)分離:PHP在修改一個(gè)變量以前,會(huì)首先查看這個(gè)變量的refcount,如果refcount大于1,PHP就會(huì)執(zhí)行一個(gè)分離的例程.【recount -=1】 寫時(shí)改變:如果是一個(gè)引用的賦值,那會(huì)發(fā)生寫實(shí)改變 【is_ref 由0->1】 (PHP內(nèi)核的存儲(chǔ)機(jī)制(分離/改變):http://blog.csdn.net/ty_hf/article/details/51057954)
四。內(nèi)存與垃圾回收 內(nèi)存: ?1.內(nèi)存是一次性申請(qǐng):在sapi周期request_init,向系統(tǒng)申請(qǐng)內(nèi)存,ZendMM向系統(tǒng)進(jìn)行的內(nèi)存申請(qǐng),并不是有需要時(shí)向系統(tǒng)即時(shí)申請(qǐng), 而是由ZendMM的最底層(heap層)先向系統(tǒng)申請(qǐng)一大塊的內(nèi)存, 建立一個(gè)類似于內(nèi)存池的管理機(jī)制。 ?2.用完后不釋放:在sapi運(yùn)行階段,及時(shí)unset變量?jī)?nèi)存也不馬上釋放,而是歸還heap堆層,將內(nèi)存復(fù)用,避免多次內(nèi)存申請(qǐng)和釋放所帶來(lái)性能消耗。 ?3.統(tǒng)一釋放:在sapi周期request_shutdown階段,統(tǒng)一銷毀釋放內(nèi)存 ?4.內(nèi)存配置:在php.ini配置,memory_limit=32M 垃圾回收: ?1.php5.3以前,引用計(jì)數(shù)回收機(jī)制,變量都有recount的參數(shù),當(dāng)為0時(shí)判斷無(wú)可用,回收。存在問(wèn)題:內(nèi)存泄漏怎么辦 ?2.php5.3以后,引用計(jì)數(shù)的基礎(chǔ)上,加入了一個(gè)復(fù)雜的垃圾回收算法(不用了解),每發(fā)生一次內(nèi)存泄漏可能操作時(shí),記錄到【根緩沖區(qū)】,到了10000執(zhí)行一次算法,清理這里邊的垃圾。 ?3.效果:復(fù)雜的算法固然會(huì)有時(shí)間消耗,增加了6~7%,但是產(chǎn)生的回收機(jī)制節(jié)約可98.3%的內(nèi)存,利大于弊。 (PHP內(nèi)核--探究?jī)?nèi)存管理與緩存機(jī)制:http://blog.csdn.net/ty_hf/article/details/52905896) (PHP內(nèi)核--內(nèi)存泄漏與新垃圾回收機(jī)制:http://blog.csdn.net/ty_hf/article/details/52906258)
五。命名空間: 作用:定義了不同的空間,解決了類,函數(shù)等名字的沖突 本質(zhì):比較簡(jiǎn)單,php底層會(huì)將 命名空間與定義函數(shù)名以\結(jié)合的形式展現(xiàn),不就不重名了嘛 (PHP內(nèi)核--命名空間:http://blog.csdn.net/ty_hf/article/details/52905209)
一。如何理解php是弱類型語(yǔ)言 1.從變量角度:在聲明一個(gè)變量不需要聲明其類型,這事PHP的特色,因?yàn)樗唤o了底層 底層的變量存儲(chǔ)是在一個(gè)zval結(jié)構(gòu)里,聲明一個(gè)變量會(huì)把所有類型都考慮到并開(kāi)辟空間,同種類型默認(rèn)用最大限度聲明(int用long,float用double),這樣絕對(duì)滿足的所有變量的需求 2.從運(yùn)算的角度:底層會(huì)根據(jù)你當(dāng)前變量類型做轉(zhuǎn)換并運(yùn)算,并且返回結(jié)果做類型轉(zhuǎn)換(string+string=int,float+string=float,sting('')==int0...);數(shù)組也可以加減參與運(yùn)算; (從存儲(chǔ)結(jié)構(gòu)理解php空,null,0'0'false:http://blog.csdn.net/ty_hf/article/details/70217267)
二。php生命周期: 主要分為3個(gè)階段,開(kāi)始階段,運(yùn)行階段,結(jié)束階段 開(kāi)始階段: 1.module_init: 初始化全局變量,引入standard標(biāo)準(zhǔn)庫(kù),加載php.ini。 啟動(dòng)apache就經(jīng)歷一次;加了dll或.so擴(kuò)展,php.ini發(fā)生改變,重啟nginx或apache的原因; 2.request_init:對(duì)全局變量賦值,激活zend引擎 運(yùn)行階段: 3.run:詞法分析-語(yǔ)法分析-opcode 訪問(wèn)腳本,程序員們最熟悉的步驟了,你寫的代碼。 結(jié)束階段: 4.request_shutdown:銷毀使用的函數(shù)變量,回收內(nèi)存 碰到die or exit自動(dòng)進(jìn)入此階段并且調(diào)用析構(gòu)方法? 5.module_shutdown:各模塊最后一次釋放內(nèi)存 (PHP內(nèi)核--生命周期:http://blog.csdn.net/ty_hf/article/details/52877759)
三。變量的分離改變 變量8種類型:int string array float bool null resource object 存儲(chǔ)在zval_value(存儲(chǔ)變量的值)zval_struct(存儲(chǔ)變量的類型引用等) 寫時(shí)分離:PHP在修改一個(gè)變量以前,會(huì)首先查看這個(gè)變量的refcount,如果refcount大于1,PHP就會(huì)執(zhí)行一個(gè)分離的例程.【recount -=1】 寫時(shí)改變:如果是一個(gè)引用的賦值,那會(huì)發(fā)生寫實(shí)改變 【is_ref 由0->1】 (PHP內(nèi)核的存儲(chǔ)機(jī)制(分離/改變):http://blog.csdn.net/ty_hf/article/details/51057954)
四。內(nèi)存與垃圾回收 內(nèi)存: ?1.內(nèi)存是一次性申請(qǐng):在sapi周期request_init,向系統(tǒng)申請(qǐng)內(nèi)存,ZendMM向系統(tǒng)進(jìn)行的內(nèi)存申請(qǐng),并不是有需要時(shí)向系統(tǒng)即時(shí)申請(qǐng), 而是由ZendMM的最底層(heap層)先向系統(tǒng)申請(qǐng)一大塊的內(nèi)存, 建立一個(gè)類似于內(nèi)存池的管理機(jī)制。 ?2.用完后不釋放:在sapi運(yùn)行階段,及時(shí)unset變量?jī)?nèi)存也不馬上釋放,而是歸還heap堆層,將內(nèi)存復(fù)用,避免多次內(nèi)存申請(qǐng)和釋放所帶來(lái)性能消耗。 ?3.統(tǒng)一釋放:在sapi周期request_shutdown階段,統(tǒng)一銷毀釋放內(nèi)存 ?4.內(nèi)存配置:在php.ini配置,memory_limit=32M 垃圾回收: ?1.php5.3以前,引用計(jì)數(shù)回收機(jī)制,變量都有recount的參數(shù),當(dāng)為0時(shí)判斷無(wú)可用,回收。存在問(wèn)題:內(nèi)存泄漏怎么辦 ?2.php5.3以后,引用計(jì)數(shù)的基礎(chǔ)上,加入了一個(gè)復(fù)雜的垃圾回收算法(不用了解),每發(fā)生一次內(nèi)存泄漏可能操作時(shí),記錄到【根緩沖區(qū)】,到了10000執(zhí)行一次算法,清理這里邊的垃圾。 ?3.效果:復(fù)雜的算法固然會(huì)有時(shí)間消耗,增加了6~7%,但是產(chǎn)生的回收機(jī)制節(jié)約可98.3%的內(nèi)存,利大于弊。 (PHP內(nèi)核--探究?jī)?nèi)存管理與緩存機(jī)制:http://blog.csdn.net/ty_hf/article/details/52905896) (PHP內(nèi)核--內(nèi)存泄漏與新垃圾回收機(jī)制:http://blog.csdn.net/ty_hf/article/details/52906258)
五。命名空間: 作用:定義了不同的空間,解決了類,函數(shù)等名字的沖突 本質(zhì):比較簡(jiǎn)單,php底層會(huì)將 命名空間與定義函數(shù)名以\結(jié)合的形式展現(xiàn),不就不重名了嘛 (PHP內(nèi)核--命名空間:http://blog.csdn.net/ty_hf/article/details/52905209)
總結(jié)
以上是生活随笔為你收集整理的php作为弱语言是最棒的~哈哈哈哈的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: PHP 错误与异常的日志记录
- 下一篇: 手动安装PHP7