PHP垃圾收集器和程序員的幽默
Composer是一個深受程序員喜歡的PHP依賴關系管理工具。最近它的源代碼上的一處改動引起了大家熱烈的討論。改動其實只是增加了一行代碼:gc_disable();
,但為什么要增加這行代碼的原因卻讓人很費解。
估計普通的PHP程序員對這行代碼并不知道是干嘛的。但單從語義的字面意思上可以猜出,它是要禁止PHP的垃圾收集器。沒錯,就是這個意思。
給那些想尋求技術解釋的人說明一下,在Composer里,PHP的垃圾收集器浪費了大量的CUP資源,它試圖收集由于 Composer在解決程序依賴問題時候產生的成千上萬的對象(這些對象是Composer用來表達依賴包內部規則的)。對象在不斷的生產,它就一遍又一 遍的收集,但事實上它什么都沒收集到,但每次對象的生產都會觸發它再次收集。
禁止PHP的垃圾收集器雖然阻止了PHP的高級功能,但卻釋放了大量的內存,這樣,Composer有足夠的內存來做自己的事情,而不是讓它們浪費在什么垃圾都收集不到的活動中。經過這樣的修改后,很多人都報告內存使用量大幅度下降。
為什么這個問題這么久了才被人發現?看起來原因是性能優化工具無法檢測到垃圾收集器的工作。很顯然,這是性能優化工具的問題,期望以后后有所改進。 但大多數情況下,這PHP的這個特征并不會成為一個問題,我不建議你們都在自己的項目中禁止垃圾收集器的工作。 在大多數情況下,PHP的垃圾收集器是非常有用的,只是在我們的Composer工具里它出現了問題。
上面的這段話是這段代碼的修改人Seldaek在Hacker News上給大家的解釋。
說的很清楚明白,消除了大家的疑惑,但這不是本文的重點,本文要說的重點是大家對這一重大修改的反應,全部體現在了Github的評論里。太歡樂了。你會發現程序員是最幽默的,下面選幾個例子:
網友clemherreman評論:
Before: Memory usage: 163.66MB (peak: 403.82MB), time: 246.25s After: Memory usage: 163.34MB (peak: 350.36MB), time: 99.55s
網友martindines評論:
Before: Memory usage: 152.71MB (peak: 335.9MB), time: 195.99s After: Memory usage: 164MB (peak: 308.02MB), time: 104.06s
網友eXtreme評論:
Before: Memory usage: 217.37MB (peak: 631.42MB), time: 313.4s After: Memory usage: 174.62MB (peak: 495.42MB), time: 152.3s After latest commit: Memory usage: 174.88MB (peak: 495.1MB), time: 67.73s
網友j0k3r評論:
Memory usage: 385.05MB (peak: 910.03MB), time: 138.81s Memory usage: 384.93MB (peak: 863.22MB), time: 26.12s
網友youbs評論:
Before: Memory usage: 2194.78MB (peak: 3077.39MB), time: 1324.69s After: Memory usage: 4542.54MB (peak: 4856.12MB), time: 232.66s
網友johnpbloch評論:
Before: Memory usage: 43.34MB (peak: 69.12MB), time: 26.57s After: Memory usage: 43.67MB (peak: 60.27MB), time: 7.01s
網友o評論:
Our builds are now faster than ever!
網友oscherler評論:
Before: Memory usage: 272.95MB (peak: 898.45MB), time: 144.32s After: Memory usage: 257.05MB (peak: 608.25MB), time: 24.34s
網友raphaelstolt評論:
Memory usage: 94.01MB (peak: 163.47MB), time: 11.24s Memory usage: 87.91MB (peak: 123.66MB), time: 3.38s
網友malaney評論:
Before: Memory usage: 207.13MB (peak: 705.58MB), time: 762.59s After: Memory usage: 164.42MB (peak: 469.22MB), time: 53.98s
哦,太多了….
你是不是也樂了,這些搞技術的人是多么有趣一群人呀,生活中雖然有些寡言少語,但在工作中,在技術問題上,他們幽默、好學、歡鬧的性格才真正的體現出來。
來自:http://www.techug.com/php-gc