不輟集

做一個「不成材」的人

我病了,基因突變了,準備給醫生割一刀了。

回首過去三十年來,在燈火闌珊處,雖偶有良師益友相伴,心中依然焦躁不安。一直以來被培養成材,成爲特定用途的器物,以求在社會中發揮功用,有工作有收入能生存。如今,這器物也有壞的時候了。

接續讀落

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ó, 擔心)東煩惱西。

接續讀落