为什么需要并发:吞吐、延迟与资源利用率
副标题 / 摘要 并发不是为了“更快”,而是为了更好地利用等待时间。本文解释并发的价值,并给出工程实践的判断与示例。 目标读者 希望提升系统吞吐的后端工程师 经常处理 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 的时间。 ...