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