0x1 什么是并发
0x2 并发的意义
性能
由于cpu的主频已经达到极限,无法再享受cpu性能提升带来红利,因此当前要提高性能只能进行水平扩展,即由单核变成多核。同时程序也由单个任务,变成多个任务同时并发执行,这样才能享受硬件水平扩展带来的红利。大部分情况下,并发编程的首要目标都是提高性能。
扩展性
生产率
0x3 并发的难点
与串型程序相比,并发的任务通常需要做更多额外的工作,包括以下4个部分。
工作分割
对程序要完成的任务进行工作分割,往往是并行编程最为重要的一环,好的分割可以使并行编程更加简单。
资源分割和复制
资源分割是为了减少并发访问共享资源的冲突,好的资源分割能有效降低并行访问控制的复杂度。
并行访问控制
各个并发任务间往往需要协作完成,需要协作就意味着存在共享资源的访问,比如内存,IO。因此需要对这些资源的访问进行控制,防止出错。
与硬件交互
- 为了压榨系统的最后一点性能的时候,往往需要针对cpu架构,存储架构等硬件做专门的优化。
- 当软件的性能已经优化的极致的时候,为了提高性能,往往需要用到ASIC芯片来做加速,减少通用cpu的负载,这是就需要直接操作硬件
