Day 060 — 阶段项目:高性能计算 · 图解
并发爬虫架构
┌──────────────────┐
│ 主进程 │
│ (Coordinator) │
└────────┬─────────┘
│ 分发 URL
┌──────────────┼──────────────┐
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│ Worker-0 │ │ Worker-1 │ │ Worker-2 │
│ (进程) │ │ (进程) │ │ (进程) │
├────────────┤ ├────────────┤ ├────────────┤
│ asyncio │ │ asyncio │ │ asyncio │
│ ├──req-1 │ │ ├──req-4 │ │ ├──req-7 │
│ ├──req-2 │ │ ├──req-5 │ │ ├──req-8 │
│ └──req-3 │ │ └──req-6 │ │ └──req-9 │
└─────┬──────┘ └─────┬──────┘ └─────┬──────┘
│ │ │
└──────────────┼──────────────┘
▼
┌──────────────────┐
│ 结果聚合 │
│ (统计 + 存储) │
└──────────────────┘
图像处理管道
输入图像 (H×W×3)
│
▼
┌─────────────────────────────────────────┐
│ Step 1: 灰度转换 │
│ R,G,B → 0.299R+0.587G+0.114B │
│ Numba parallel=True 加速 │
└─────────────────┬───────────────────────┘
▼
┌─────────────────────────────────────────┐
│ Step 2: 高斯模糊 │
│ 5×5 高斯核卷积 │
│ 消除噪声,平滑边缘 │
└─────────────────┬───────────────────────┘
▼
┌─────────────────────────────────────────┐
│ Step 3: Sobel 边缘检测 │
│ Gx = Sobel_x ⊗ image │
│ Gy = Sobel_y ⊗ image │
│ G = √(Gx² + Gy²) │
└─────────────────┬───────────────────────┘
▼
输出边缘图
Amdahl 定律
加速比 = 1 / ((1-P) + P/N)
P = 可并行比例, N = 处理器数
加速比
10x ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ P=100%
│ ·····
8x ─ ····
│ ····
6x ─ ···· P=90%
│ ····
4x ─···· P=70%
│··
2x ─· P=50%
│
1x ──────────────────────────────
1 2 4 8 16 32 64
处理器数 (N)
关键洞察:
• P=50% → 64 个 CPU 最多 2x 加速
• P=90% → 64 个 CPU 最多 8.7x 加速
• P=99% → 64 个 CPU 最多 39x 加速
性能优化策略总结
┌──────────────────────────────────────────┐
│ 性能优化三板斧 │
├──────────────────────────────────────────┤
│ │
│ 1. 算法优化 (收益最大) │
│ O(n²) → O(n log n) → O(n) │
│ │
│ 2. 并行化 (多核利用) │
│ 多进程 → 多线程 → asyncio │
│ Numba parallel → GPU │
│ │
│ 3. 编译优化 (语言级) │
│ Python → Cython → C │
│ Numba JIT → LLVM 优化 │
│ │
└──────────────────────────────────────────┘