不輟集

Python 程序內存管理及OOM問題分析

內存管理

Python 採用以引用計數法為主,以標記-清除算法和分代收集為輔的內存管理策略。

標記-清除算法會從根節點出發標記所有「活動對象」,然後再將沒有標記到的對象標記為「非活動對象」進行回收。因此該算法可以用來解決循環引用導致的內存洩漏問題。

分代收集算法會將內存對象分到三個世代中,每個代觸發回收時只回收當前代,並將存活的對象轉移到下一代,對象所在世代越久遠的越不可能是垃圾,觸發回收的頻率越低。因此該算法通過空間換時間的方式提高了垃圾回收效率。

OOM 問題分析

當進程中有大量線程在等待執行,或者有大對象未被及時釋放時,會造成系統內存資源緊張,甚至 OOM(內存溢出),從而服務進程被 kill。

接續讀落

Python 程序如何做到高效且穩健?

Python 幾乎是每個程序員都會使用的語言,但大多數人都將 Python 視為腳本語言,在需要的時候運行一下,進行數據處理或抓取等。大部分情況下都是一次性的工作(Job),很少有人會將其作爲長期運行的後端服務。這是爲何?

Python 是一門解釋型的語言,其依賴於 Python解釋器(或直譯器,官方的且最流行的是 CPython解釋器)來加載源代碼然後解釋運行。解釋運行使得 Python可以在終端中直接運行 python 即可開始一邊寫代碼一邊看運行結果,對用戶相當友好,但與之同時也帶來了無可避免的性能問題,從而難以成為後端服務的主流。主流如 Java、Go 都是編譯型的語言,意味著源代碼需要先編譯成二進制文件(在Java中是字節碼),然後直接在運行時(在Java中是JVM)中運行,且在編譯成二進制文件的過程中通常會進行若干優化,使得運行的程序更加高效。

接續讀落

穢着新冠之後

​最近全國攏在佮新冠病毒共存,我也穢着(ùe–tio̍h, 感染)了,時間是2022年12月20日​。

到今已經第六日了,情況好​㩼囉。

好在我早有預備 加減(ke-kiám, 一點)藥、礦泉水、肉佮菜,生病期間免煩惱(huân-ló, 擔心)東煩惱西。

接續讀落

新時代生存守則

小謝爾頓S1EP13

自 19 年末以降,我們就進入了一個嶄新的時代,一個戴口罩的時代,一個做核酸的時代,一個進門先看健康碼、行程卡的時代,一個出門甚至不出門都可能被隔離的時代。

每個時代都有每個時代的生存之道,拒絕適應時代變化的人不是偉人就是塵埃。作爲大多數普通人通常很難改變時代,即使可能也無法驟然改變。爲了不淪爲塵埃(直白點就是苟活著),從現在開始(可能對有些人來說已經晚了)適應「新時代」才是比較務實的選擇。

接續讀落