用 Python 學網路程式設計重要概念

用 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

用 Python 學網路程式設計重要概念 — 從 I/O 多工再到多執行緒以及 Thread Pool

在「用 Python 學網路程式設計重要概念,從單執行緒到 I/O 多工(I/O multiplexing)」 1 文中,我們利用多個 Python 範例程式學會 I/O 多工的 3 種 syscall, 分別是 select() , poll() 以及 epoll() ,藉由 I/O 多工讓程式即使只有單執行緒也能同時處理多個連線。

本文將從 I/O 多工開始,進一步延伸學習多執行緒以及 Thread Pool 這 2 個經典的網路程式設計架構。

Posted on  Jun 14, 2024  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 8 min read

用 Python 學網路程式設計重要概念 — 從多執行緒到 Multi-process, Pre-fork 再到 Multi-process 混搭 Multi-thread

在這篇文章,我們將結合先前所學到的知識,更深入地探討網路程式設計中的一些重要概念,特別是使用 Python 從多執行緒架構開始,逐步過渡到 multi-process 和 pre-fork 技術,最終結合 multi-process 和 multi-thread,形成混合式架構。

通過這些過程,我們不僅能理解這些技術背後的原理,還能掌握網路程式設計中的核心技術,並將這些概念融會貫通,為開發高效能的網路應用打下堅實的基礎。

Posted on  Jun 17, 2024  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 8 min read

用 Python 學網路程式設計重要概念 — 從 asyncio 到 asyncio 混搭 Multi-process

「 asyncio 就是快」應該是許多人對於 Python asyncio 的認知,但實際上 asyncio 就跟眾多技術一樣並不完美,它也有不擅長以及適合它的應用場景,認識這些它的缺點與優點將可以讓你在不同的應用場景上做出正確的技術決策。

本文將使用 asyncio 高階函式帶大家體驗用 asyncio 開發網路應用的感覺,並打破「 asyncio 就是快」的迷思,從而看到 asyncio 的本質!

Last updated on  Jul 25, 2024  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 10 min read