副标题 / 摘要
并发不是为了“更快”,而是为了更好地利用等待时间。本文解释并发的价值,并给出工程实践的判断与示例。
目标读者
- 希望提升系统吞吐的后端工程师
- 经常处理 I/O 等待的开发者
- 需要做性能与架构决策的技术负责人
背景 / 动机
很多程序在等待 I/O(磁盘、网络、数据库)时并不占用 CPU。
并发让 CPU 在等待期间去做别的事,从而提高吞吐、降低整体延迟。
核心概念
- 吞吐(Throughput):单位时间内处理的请求数量
- 延迟(Latency):单个请求完成的时间
- I/O 等待:CPU 空闲但任务阻塞
- 并行与并发:并行是同时执行,并发是交错执行
实践指南 / 步骤
- 判断瓶颈是否来自 I/O
- 优先使用异步或多线程处理 I/O
- 对 CPU 计算使用并行
- 限制并发度,避免过度上下文切换
- 监控吞吐与尾延迟
可运行示例
下面对比串行与并发请求:
import time
import threading
def io_task(i):
time.sleep(0.2)
return i
def serial(n):
start = time.time()
for i in range(n):
io_task(i)
return time.time() - start
def concurrent(n):
start = time.time()
threads = []
for i in range(n):
t = threading.Thread(target=io_task, args=(i,))
t.start()
threads.append(t)
for t in threads:
t.join()
return time.time() - start
if __name__ == "__main__":
print("serial:", serial(5))
print("concurrent:", concurrent(5))
解释与原理
串行执行时,5 个 I/O 等待累加。
并发执行时,等待时间重叠,整体耗时接近单个 I/O 的时间。
常见问题与注意事项
并发一定更快吗?
不一定。CPU 密集任务过多并发会导致切换成本升高。并发是不是等于并行?
不等。单核也可以并发,但不能并行。并发过多会怎样?
可能导致争用、排队和资源枯竭。
最佳实践与建议
- I/O 密集任务优先并发
- CPU 密集任务优先并行(多进程/多核)
- 控制并发度,避免资源放大
小结 / 结论
并发的价值在于提高资源利用率和吞吐,并非一味追求速度。
只有在 I/O 等待明显时,并发才有明显收益。
参考与延伸阅读
- The Art of Multiprocessor Programming
- Linux 上下文切换与调度
- Go / Java / Python 并发模型对比
元信息
- 阅读时长:7~9 分钟
- 标签:并发、吞吐、I/O
- SEO 关键词:Concurrency, I/O, Throughput
- 元描述:解释为什么需要并发,并给出工程落地建议。
行动号召(CTA)
挑一个 I/O 密集接口,试试引入并发或异步,观察吞吐变化。