實測 Rust 與 Python 在多執行緒併發下的 Throughput 與 Latency 表現比較

將性能瓶頸的 Python 代碼用 Rust 重寫,編譯成 Python 可以直接調用的二進制模組。

Posted by Young on 2025-10-13
Estimated Reading Time 1 Minutes
Words 455 In Total

locust 蝗蟲壓力測試工具

為何 Rust 在 CPU 密集運算下會比 Python 快?

Rust 快的原因:

  1. ✅ 編譯成機器碼 - 更底層,無中間層
  2. ✅ 編譯器優化 - LLVM 做大量優化
  3. ✅ 無 GIL - 真正的多核並行
  4. ✅ 零成本抽象 - 高階語法,無性能損失
  5. ✅ 記憶體管理 - 編譯時確定,無 GC 開銷

Python 慢的原因:

  1. ❌ 解釋執行 - 每次都要翻譯
  2. ❌ 動態型別 - 運行時檢查型別
  3. ❌ GIL 限制 - 單核執行
  4. ❌ 記憶體開銷 - 動態分配 + 垃圾回收

靜態型別 vs 動態型別

  1. Rust:編譯期就知道所有變數型別,能幫助編譯器做最佳化。
  2. Python:每次運算(例如 a + b)都要檢查 a 和 b 的型別,甚至呼叫底層 C 函數,增加 overhead。

比如:

1
2
# Python 要判斷 int/float/str,甚至要拋錯
result = a + b

Rust 編譯期就知道 a 和 b 是什麼型別,直接生成對應的機器碼

1
2
// Rust 在編譯期就確定型別,CPU 直接執行加法
let result = a + b;

Python 的 GIL 問題

即使有 4 個 CPU 核心,同一時間只能有 1 個線程執行 Python 程式碼

Python:

Thread 1: 執行中 🟢
Thread 2: 等待 GIL 🔴
Thread 3: 等待 GIL 🔴
Thread 4: 等待 GIL 🔴

Rust 無 GIL: 可以真正利用多核 CPU

Thread 1: 執行中 🟢
Thread 2: 執行中 🟢
Thread 3: 執行中 🟢
Thread 4: 執行中 🟢

但 Python 的優勢是開發速度快! 所以我們用 Rust 重寫需要盡可能增加速度的部分,其他部分就保留 Python 👍

「Rust for speed, Python for productivity」

結論:Rust 靠「靜態型別 + 編譯最佳化 + 真正並行 + 記憶體安全」贏在效能;Python 靠「動態型別 + 解譯執行 + GIL」輸在速度,但贏在生態系和開發速度。兩者搭配常常是最好的解法。


若您覺得這篇文章對您有幫助,歡迎分享出去讓更多人看到⊂◉‿◉つ~


留言版