Amo Chen

好文分享 — An Intro to Logging with Python and Loguru

先前我們介紹過 Python 1 個名稱為 structlog 的 logging 套件,本文再介紹 1 個同樣也是專注在 logging 的 Loguru 。 Loguru 與 structlog 同樣追求簡單好用,使用上不需要做什麼設定,就可以跟 JavaScript 的 console.log() 一樣

Posted on  May 19, 2024  by  Amo Chen  ‐ 1 min read

有趣的 Micromouse 科普影片

影片所介紹的電腦鼠,又稱為 mircomouse (有興趣的人可以搜尋 micromouse)。 雖然以前看過 micromouse 的比賽影片,但當時並沒有深思背後的演算法原理,只是當作

Posted on  May 13, 2024  by  Amo Chen  ‐ 1 min read

用 Python 學網路程式設計重要概念 — 從單執行緒到 I/O 多工(I/O multiplexing)

在學習網路程式設計時,每個人都遇過怎麼讓 sever 可以盡可能地處理更多連線的課題,要達到這個目的,多數人直覺應該會想到運用多執行緒、多 processes 的架構,為每個連線建立 1 個新的執行緒或 process 處理,但是這種方法在處理大量連線時,就顯得捉襟見肘,單就多執行緒的解決方案來說,隨著連線數上升,首先就會遇到 CPU context switch 所造成的效能問題,更遑論多 processes 架構會需要使用比多執行緒架構更多資源的問題。

但現代有很多應用僅用單執行緒就能夠處理龐大的連線數,包含 Nginx, Redis 等知名開源軟體,這些軟體是怎麼做到的呢?這就需要談到 1 種稱為 I/O multiplexing 的技術!

本文將教導 1 種稱為 I/O multiplexing 的技術,該技術能夠讓單執行緒處理多個連線,將效能壓榨出來!

p.s. 這個技術還可以與多執行緒、多 processes 架構混用

Posted on  May 12, 2024  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 15 min read

好文分享 — Select vs. Poll vs. Epoll

Nginx 的 worker_processes 其實每 1 個都是 single-threaded process 。 Nginx 之所以採用 single-threaded processes 還能這麼高效能,這其中用了不少技術,其中 1 個稱為 multiplexing 。 相信很多人看到這個單字就不想深究了,但其實它只

Posted on  May 10, 2024  by  Amo Chen  ‐ 1 min read