02-5. Thread Pool 與實戰應用 ⏱️ 閱讀時間: 18 分鐘 🎯 難度: ⭐⭐⭐ (中等)
🤔 一句話解釋 Thread Pool 是預先創建的 Thread 集合,重複使用來執行多個任務,避免頻繁創建/銷毀 Thread 的開銷。
❌ 沒有 Thread Pool 的問題 問題 1:頻繁創建/銷毀 Thread import time from threading import Thread def task(task_id): time.sleep(0.1) return f"Task {task_id} 完成" # 處理 100 個任務,每個任務創建一個 Thread start = time.time() threads = [] for i in range(100): t = Thread(target=task, args=(i,)) t.start() threads.append(t) for t in threads: t.join() print(f"時間: {time.time() - start:.
Yoru Karu Studio
程式設計學習筆記 | 生活心得程式設計學習筆記 | 生活心得
02-6. Multi-threading vs Multi-processing 完整對比 ⏱️ 閱讀時間: 15 分鐘 🎯 難度: ⭐⭐ (簡單)
🎯 本篇重點 深入理解 Multi-threading(多執行緒)和 Multi-processing(多進程)的核心差異、適用場景及實戰案例。
🤔 核心差異:一句話總結 Multi-threading:一個程式內創建多個 Thread,共享記憶體空間。 Multi-processing:一個程式創建多個獨立 Process,各自擁有完全隔離的記憶體空間。
🏢 公司組織比喻 Multi-threading = 開放式辦公室 Yoru-Karu Studio(單一公司 = 1 個 Process) │ ├─ 共享辦公空間(共享記憶體) │ ├─ 員工 A(Thread 1)→ 處理訂單 │ ├─ 員工 B(Thread 2)→ 接聽客服電話 │ ├─ 員工 C(Thread 3)→ 更新官網內容 │ └─ 員工 D(Thread 4)→ 回覆客戶郵件 │ └─ 共享資源 ├─ 共用白板、檔案櫃(所有員工可直接存取) ├─ 溝通超快(面對面對話) ├─ 但可能搶資源(需要排隊協調) └─ 一人出錯可能影響全辦公室特點:
02-7. 何時用 Thread?何時用 Process?決策指南 ⏱️ 閱讀時間: 10 分鐘 🎯 難度: ⭐⭐ (簡單)
🎯 本篇重點 提供清晰的決策樹和實戰案例,幫助你快速判斷何時使用 Thread、何時使用 Process。
🤔 快速決策流程圖 開始:我需要併發處理 ↓ ┌──────────────────────────┐ │ 任務類型是什麼? │ └──────────────────────────┘ ↓ ├─ I/O 密集型(網路、檔案、資料庫) │ → 使用 Multi-threading │ └─ 需要大量併發(>1000)? │ ├─ 是 → 使用 asyncio │ └─ 否 → 使用 threading │ └─ CPU 密集型(計算、資料處理) → 使用 Multi-processing └─ 需要數據共享? ├─ 否 → 使用 Pool └─ 是 → 使用 Process + Manager/Value 📊 決策矩陣 情境 1:任務類型 任務類型 推薦方案 原因 網路請求 Thread I/O 等待時釋放 GIL 檔案讀寫 Thread I/O 操作 資料庫查詢 Thread I/O 等待 數學計算 Process 需要 CPU 並行 影像處理 Process CPU 密集 資料分析 Process CPU 密集 大量併發 I/O asyncio 最高效 情境 2:程式特性 需求 Thread Process 需要共享大量資料 ✅ 推薦 ❌ 成本高 需要完全隔離 ❌ 不行 ✅ 推薦 需要快速創建 ✅ 推薦 ❌ 較慢 需要穩定性 ❌ 一崩全崩 ✅ 隔離 需要利用多核 ❌ GIL 限制 ✅ 可以 數量需要很多 ✅ 可以 ❌ 受限 🔍 實戰案例分析 案例 1:網路爬蟲 需求:
03-1. IPC 概述 ⏱️ 閱讀時間: 8 分鐘 🎯 難度: ⭐⭐ (簡單)
🤔 什麼是 IPC? IPC (Inter-Process Communication) = 進程間通訊
一句話解釋: 讓不同的 Process 能夠互相傳遞資料和訊息的機制。
🏢 用公司來比喻 公司 A(Process A) 公司 B(Process B) ├─ 辦公室 A ├─ 辦公室 B ├─ 獨立資源 ├─ 獨立資源 └─ 員工 └─ 員工 問題:兩家公司如何溝通?IPC 機制 = 公司間的溝通方式:
📞 Pipe = 電話專線 📨 Message Queue = 郵件系統 📂 Shared Memory = 共用雲端硬碟 🌐 Socket = 網路會議 📋 IPC 的五種主要方式 1.
03-2. Pipe(管道)詳解 ⏱️ 閱讀時間: 12 分鐘 🎯 難度: ⭐⭐ (簡單)
🤔 一句話解釋 Pipe(管道)是一種單向或雙向的通訊通道,主要用於父子 Process 或相關 Process 之間的資料傳輸。
📞 用電話專線來比喻 Process A Process B ├─ 寫入端 ──────────→ 讀取端 │ └─ 就像電話專線: - 一端說話(寫入) - 另一端聽(讀取) - 點對點連接 🔧 Pipe 的類型 1. 單向 Pipe (One-way Pipe) from multiprocessing import Process, Pipe def sender(conn): """發送端""" messages = ["Hello", "World", "from", "Process A"] for msg in messages: conn.send(msg) print(f"發送: {msg}") conn.close() def receiver(conn): """接收端""" while True: try: msg = conn.
03-3. Message Queue(消息佇列)詳解 ⏱️ 閱讀時間: 15 分鐘 🎯 難度: ⭐⭐⭐ (中等)
🤔 一句話解釋 Message Queue(消息佇列)是一種多對多的 IPC 機制,允許多個生產者和消費者通過 FIFO 佇列交換訊息。
📨 用郵件系統來比喻 生產者(發件人) 消息佇列(郵局) 消費者(收件人) │ ┌──────┐ │ ├──── 訊息 1 ──────→ │訊息 1 │ ────→ 消費者 A │ ├──────┤ │ ├──── 訊息 2 ──────→ │訊息 2 │ ────→ 消費者 B │ ├──────┤ │ └──── 訊息 3 ──────→ │訊息 3 │ ────→ 消費者 C └──────┘ 特點: - 訊息排隊等待處理 - 先進先出(FIFO) - 支援多個發送者和接收者 - 非同步通訊 🎯 Queue 的基本用法 1.