第1章 简介

1. 简介

容易出错,为什么要编写并发程序?复杂异步代码更简单,简化复杂系统开发,充分发挥多处理器系统的计算能力

1.1 并发简史

操作系统的实现多个程序同时执行,原因:

  • 资源利用率
  • 公平性 时间分片(Time Slicing)
  • 便利性

1.2 线程的优势

降低复杂度、提升程序性能

1.2.1 发挥多处理器的强大能力

1.2.2 建模的简单性

1.2.3 异步事件的简化处理

1.2.4 响应更灵敏的用户界面

1.3 线程带来的风险

双刃剑

1.3.1 安全性问题

竟态条件(Race Condition)它旨在描述一个系统或者进程的输出依赖于不受控制的事件出现顺序或者出现时机。当两个线程竞争同一资源时,如果对资源的访问顺序敏感,就称存在竞态条件

1.3.2 活跃性问题

死锁、饥饿、活锁

1.3.3 性能问题

服务时间过长,响应不灵敏,吞吐率低,资源消耗过高,可伸缩性较低

线程开销:

  • 上下文切换(cs context switch):保存和恢复执行上下文,丢失局部性,线程调度花费更多CPU时间
  • 同步机制共享数据:抑制某些编译器优化,使内存缓存区数据无效,增加共享内存总线的同步流量

1.4 线程无处不在