需要并发的根本原因是:充分利用硬件资源、提升吞吐与响应能力。
展开解析:
- 榨干 CPU:单线程在等待 I/O(磁盘、网络)时 CPU 完全空闲,让其他线程/任务趁机执行,可以把 CPU 利用率和系统吞吐量拉上去。这是 I/O 密集型程序并发收益最大的原因。
- 利用多核:现代 CPU 核数越来越多,单线程只能用一个核;并行(并发的子集)才能把计算分摊到多个核,缩短 CPU 密集型任务的总耗时。
- 保证响应性:GUI 程序把耗时操作放到后台线程,界面才不卡死;服务端用并发让每个请求独立处理,一个慢请求不阻塞其他用户。
- 建模现实世界:很多系统天然是并发的(多个用户、多个传感器),用并发结构建模更直观。
易错点:并发不是银弹——线程有创建/切换成本,共享数据引入竞态、死锁等全新问题,盲目加线程反而更慢;并发(concurrency,逻辑上同时推进)与并行(parallelism,物理上同时执行)不是一回事。
追问方向:Amdahl 定律(串行部分限制加速比上限)、线程池为何优于无限创建线程、协程/异步 I/O 解决了什么。