本文目的是理清并发编程的核心脉络是整个cpp并发编程系列的大纲阐述了并发编程和目的使用背景和解决的核心问题引入并发编程的核心要素以线程为代表阐述了线程并发要素并进一步分解出线程并发模式在并发模式的基础上进一步对并发编程的问题提出解决方案最后讨论了并发编程面临的问题和核心评估标准。并发编程背景与问题并发编程是在保证系统稳定的前提下尽量提高程序效率。主要场景是io密集和cpu密集型。CPU密集型场景有加密解密、视频编码、科学计算任务特征是计算密集CPU持续高负载问题表现在单个CPU核心计算能力有限多核处理器未被充分利用I/O密集型场景有网络请求、文件读写、数据库操作任务特征是大量时间消耗在等待外部响应问题表现在线程在等待IO响应时CPU处于空闲状态任务能够合理分解时并发编程通过并行计算和重叠等待来提高资源利用率从而提升性能。并发编程要素并发的类型可以进一步分为并行和并发并行是多个任务同时进行并发是多个任务交替进行并行一般用于解决cpu密集型任务并发一般用于解决io密集任务。并发编程承载的具体形式是进程、线程、协程其中进程偏向解决cpu密集任务、协程偏向解决io密集任务线程则具有通用并发性既能并行也能并发。线程并发要素由于线程具有通用并发性因此当下内容都是在多线程基础上的讨论。为了理解方便从实际应用出发的两个角度出发分解出多个基本要素。数据角度多线程会同时调用一份数据需要保证数据一致性所以需要数据保护机制常见的方式包括锁和原子操作。多线程会有数据交流需要相互协调所以需要通信机制常见的通信方式需要共享变量、消息传递。协作角度多线程会相互调用根据调用方式不同分为同步异步调用方等待结果的方式为同步同步常见的方式有阻塞等待、条件变量。调用方不等待结果的方式为异步异步常见的方式有future/promise、async/await、回调函数。线程并发模式线程并发模式并发编程面临的问题具有相似性可以分为很多类由此产生了很多并发模式这些模式由基本要素组成。核心可以从池思想和流思想出发即线程池和流水线两种模式线程池将一个任务分解为多个并行任务流水线将一个任务分解为多个阶段。从线程池为核心的角度可以将模式视为线程池分治模式就是cpu密集计算的基础线程池异步模式就是io密集计算的基础。线程池分治模式的基础上优化就出现了工作窃取模式优化线程池mapreduce扩展到分布式系统。线程池异步模式的基础上优化就出现了协程异步io轻量化线程事件驱动进一步优化。流水线则是另一种优化方式将一个任务分为多个阶段。基础模式为生产者/消费者队列进一步优化包括了响应式流模式。响应式在基础模式上解决了抽象和背压。流模式进一步解决了事件和状态。并发编程问题使用过程中存在的问题1.死锁互相等待资源2.活锁互相谦让资源3.竞态条件非原子操作共享数据4.性能瓶颈锁竞争、频繁切换核心评估标准吞吐量延迟资源利用率可伸缩性其他并发承载形式线程共享进程资源对共享资源的访问需要同步机制如锁、原子操作在同步操作时会导致资源竞争。进程提供完全的资源隔离计算时不会存在共享资源自然不会出现资源竞争。所以进程适合CPU密集型任务因为不会遇见资源瓶颈。线程切换需要进入内核态保存完整的CPU上下文约1KB开销在微秒级。协程切换在用户态完成只需保存少量寄存器约100字节开销在纳秒级。所以协程适合IO密集型任务因为能高效处理大量并发IO操作。
c++并发编程总纲
发布时间:2026/6/9 11:49:33
本文目的是理清并发编程的核心脉络是整个cpp并发编程系列的大纲阐述了并发编程和目的使用背景和解决的核心问题引入并发编程的核心要素以线程为代表阐述了线程并发要素并进一步分解出线程并发模式在并发模式的基础上进一步对并发编程的问题提出解决方案最后讨论了并发编程面临的问题和核心评估标准。并发编程背景与问题并发编程是在保证系统稳定的前提下尽量提高程序效率。主要场景是io密集和cpu密集型。CPU密集型场景有加密解密、视频编码、科学计算任务特征是计算密集CPU持续高负载问题表现在单个CPU核心计算能力有限多核处理器未被充分利用I/O密集型场景有网络请求、文件读写、数据库操作任务特征是大量时间消耗在等待外部响应问题表现在线程在等待IO响应时CPU处于空闲状态任务能够合理分解时并发编程通过并行计算和重叠等待来提高资源利用率从而提升性能。并发编程要素并发的类型可以进一步分为并行和并发并行是多个任务同时进行并发是多个任务交替进行并行一般用于解决cpu密集型任务并发一般用于解决io密集任务。并发编程承载的具体形式是进程、线程、协程其中进程偏向解决cpu密集任务、协程偏向解决io密集任务线程则具有通用并发性既能并行也能并发。线程并发要素由于线程具有通用并发性因此当下内容都是在多线程基础上的讨论。为了理解方便从实际应用出发的两个角度出发分解出多个基本要素。数据角度多线程会同时调用一份数据需要保证数据一致性所以需要数据保护机制常见的方式包括锁和原子操作。多线程会有数据交流需要相互协调所以需要通信机制常见的通信方式需要共享变量、消息传递。协作角度多线程会相互调用根据调用方式不同分为同步异步调用方等待结果的方式为同步同步常见的方式有阻塞等待、条件变量。调用方不等待结果的方式为异步异步常见的方式有future/promise、async/await、回调函数。线程并发模式线程并发模式并发编程面临的问题具有相似性可以分为很多类由此产生了很多并发模式这些模式由基本要素组成。核心可以从池思想和流思想出发即线程池和流水线两种模式线程池将一个任务分解为多个并行任务流水线将一个任务分解为多个阶段。从线程池为核心的角度可以将模式视为线程池分治模式就是cpu密集计算的基础线程池异步模式就是io密集计算的基础。线程池分治模式的基础上优化就出现了工作窃取模式优化线程池mapreduce扩展到分布式系统。线程池异步模式的基础上优化就出现了协程异步io轻量化线程事件驱动进一步优化。流水线则是另一种优化方式将一个任务分为多个阶段。基础模式为生产者/消费者队列进一步优化包括了响应式流模式。响应式在基础模式上解决了抽象和背压。流模式进一步解决了事件和状态。并发编程问题使用过程中存在的问题1.死锁互相等待资源2.活锁互相谦让资源3.竞态条件非原子操作共享数据4.性能瓶颈锁竞争、频繁切换核心评估标准吞吐量延迟资源利用率可伸缩性其他并发承载形式线程共享进程资源对共享资源的访问需要同步机制如锁、原子操作在同步操作时会导致资源竞争。进程提供完全的资源隔离计算时不会存在共享资源自然不会出现资源竞争。所以进程适合CPU密集型任务因为不会遇见资源瓶颈。线程切换需要进入内核态保存完整的CPU上下文约1KB开销在微秒级。协程切换在用户态完成只需保存少量寄存器约100字节开销在纳秒级。所以协程适合IO密集型任务因为能高效处理大量并发IO操作。