在開始寫第一個(gè)PHP程序之前,我們需要了解文件、硬盤、內(nèi)存、CPU、操作系統(tǒng)。這些都是平時(shí)耳熟能詳?shù)臇|西,通過熟悉的事物來打開編程的大門將更容易。
-
文件
為什么要將文件放在第一個(gè)位置來介紹?因?yàn)槲募褪谴a,無論是編譯前的還是編譯后的代碼,都是文件。圖片是代碼,視頻是代碼,一切電腦上存在的東西都能理解為代碼,只是打開的工具不一樣。.py文件需要Python打開,.php文件需要PHP打開,.html文件需要瀏覽器打開等等。代碼并沒有多神奇,隨處可見。都能用記事本打開,只是『肉眼』這個(gè)解析器能不能讀懂罷了。
-
硬盤
硬盤是我們存放代碼的載體,這里需要對(duì)硬盤的速度有個(gè)概念。硬盤讀寫的速度基本是 45M/秒 (不同硬盤有差異,讀寫也有差異)。一些很大的項(xiàng)目,比如Yii和Laravel源代碼都有60M。理論上每個(gè)請(qǐng)求都要加載這60M代碼,只加載就要1秒多,為什么幾毫秒就能返回結(jié)果呢?這是我們需要思考的問題。當(dāng)然有些PHP項(xiàng)目有幾百M(fèi),但并不影響項(xiàng)目的性能,所以并不是項(xiàng)目文件越大就越慢,這也是需要知道的概念。
-
內(nèi)存
內(nèi)存可以理解為讀寫速度更快的硬盤,我們很多時(shí)候會(huì)把通用的代碼和數(shù)據(jù)放內(nèi)存中,這樣讀取和寫入速度會(huì)更快,減少因?yàn)橛脖P讀寫導(dǎo)致的耗時(shí)。當(dāng)然內(nèi)存資源相比硬盤更昂貴。在Web開發(fā)中,讀寫頻繁和IO密集型操作肯定會(huì)導(dǎo)致內(nèi)存消耗增加。比如我們常說的單機(jī)1萬QPS,大多時(shí)候瓶頸就在內(nèi)存。還有用空間換時(shí)間也是常用的編程技巧,就是使用更多的內(nèi)存來加快計(jì)算。
-
CPU
CPU主要用來做計(jì)算,單個(gè)CPU的計(jì)算速度已經(jīng)足夠快,快的內(nèi)存都來不及提供數(shù)據(jù)。比如內(nèi)存一秒能讀取10G數(shù)據(jù),CPU一秒能計(jì)算100G數(shù)據(jù),往往內(nèi)存會(huì)拖慢CPU,所以才有了一級(jí)緩存,二級(jí)緩存,三級(jí)緩存,這些緩存是比內(nèi)存更快的存儲(chǔ)器。因?yàn)椴僮飨到y(tǒng)設(shè)計(jì)的關(guān)系,一個(gè)線程只能使用一個(gè)CPU核心,為了充分利用CPU的多個(gè)核,就需要通過編程來實(shí)現(xiàn),比如通過多進(jìn)程單線程(Nginx)、單進(jìn)程多線程(Memcached)等。在Web編程中,只有遇到密集型的計(jì)算才會(huì)考慮CPU的瓶頸問題,比如加密解密,圖像渲染,機(jī)器學(xué)習(xí)等。其他大部分場(chǎng)景下CPU都不會(huì)成為優(yōu)先考慮的因素。
-
操作系統(tǒng)
操作系統(tǒng)我們每天都在用,它管理著硬件并提供了一個(gè)生態(tài)環(huán)境讓軟件穩(wěn)定運(yùn)行,比如Android,iOS,Windows,Linux等等。編程時(shí)刻都要與操作系統(tǒng)打交道,比如進(jìn)程管理,進(jìn)程間通信,內(nèi)存申請(qǐng),堆棧使用,基于不同的操作系統(tǒng)對(duì)代碼做不同的優(yōu)化等等。這是一門很大的學(xué)問,夸張點(diǎn)來說正是有了操作系統(tǒng)才有了后來編程語言的百花齊放。
介紹了如上信息之后,我們需要帶著問題去編碼,這樣學(xué)習(xí)起來能事半功倍。
- 對(duì)于一個(gè)50M大小的PHP項(xiàng)目,如何保證項(xiàng)目不會(huì)隨著文件的增加導(dǎo)致性能下降?關(guān)鍵詞,按需加載
- PHP程序如何利用多核CPU?關(guān)鍵詞,php-fpm
- PHP程序如何調(diào)用操作系統(tǒng)的進(jìn)程管理方法,生成進(jìn)程,管理進(jìn)程,進(jìn)行進(jìn)程間通信?關(guān)鍵詞,進(jìn)程間通信(與編程語言無關(guān))
在編寫PHP程序的這些年里,無論解決多大的難題都離不開這5個(gè)基礎(chǔ)知識(shí)點(diǎn),整個(gè)Web生態(tài)圈都圍繞著這些點(diǎn)在不停的優(yōu)化。下一篇文章我會(huì)帶著第一個(gè)問題來寫PHP代碼。
如果你喜歡我的文章,請(qǐng)關(guān)注我的博客 PHP教程系列3-寫PHP程序前必須知道的5點(diǎn)信息
喜歡編程的朋友可以關(guān)注我的個(gè)人公眾號(hào),保證每周三篇原創(chuàng)。