我病了,基因突變了,準備給醫生割一刀了。
回首過去三十年來,在燈火闌珊處,雖偶有良師益友相伴,心中依然焦躁不安。一直以來被培養成材,成爲特定用途的器物,以求在社會中發揮功用,有工作有收入能生存。如今,這器物也有壞的時候了。
我病了,基因突變了,準備給醫生割一刀了。
回首過去三十年來,在燈火闌珊處,雖偶有良師益友相伴,心中依然焦躁不安。一直以來被培養成材,成爲特定用途的器物,以求在社會中發揮功用,有工作有收入能生存。如今,這器物也有壞的時候了。
Python 採用以引用計數法為主,以標記-清除算法和分代收集為輔的內存管理策略。
標記-清除算法會從根節點出發標記所有「活動對象」,然後再將沒有標記到的對象標記為「非活動對象」進行回收。因此該算法可以用來解決循環引用導致的內存洩漏問題。
分代收集算法會將內存對象分到三個世代中,每個代觸發回收時只回收當前代,並將存活的對象轉移到下一代,對象所在世代越久遠的越不可能是垃圾,觸發回收的頻率越低。因此該算法通過空間換時間的方式提高了垃圾回收效率。
當進程中有大量線程在等待執行,或者有大對象未被及時釋放時,會造成系統內存資源緊張,甚至 OOM(內存溢出),從而服務進程被 kill。
Python 幾乎是每個程序員都會使用的語言,但大多數人都將 Python 視為腳本語言,在需要的時候運行一下,進行數據處理或抓取等。大部分情況下都是一次性的工作(Job),很少有人會將其作爲長期運行的後端服務。這是爲何?
Python 是一門解釋型的語言,其依賴於 Python解釋器(或直譯器,官方的且最流行的是 CPython解釋器)來加載源代碼然後解釋運行。解釋運行使得 Python可以在終端中直接運行 python
即可開始一邊寫代碼一邊看運行結果,對用戶相當友好,但與之同時也帶來了無可避免的性能問題,從而難以成為後端服務的主流。主流如 Java、Go 都是編譯型的語言,意味著源代碼需要先編譯成二進制文件(在Java中是字節碼),然後直接在運行時(在Java中是JVM)中運行,且在編譯成二進制文件的過程中通常會進行若干優化,使得運行的程序更加高效。