csapp 第12章 并发编程 读书笔记

并发编程

应用级并发

  • 访问慢速I/O设备
  • 与人交互
  • 通过推迟工作以降低延迟
  • 服务多个网络客户端
  • 在多核机器上进行并行计算

现代操作系统提供三种基本的构造并发程序的方法

  • 进程
  • I/O多路复用
  • 线程

基于进程的并发编程

csapp 第12章 并发编程 读书笔记

csapp 第12章 并发编程 读书笔记

进程的优劣

优点:一个进程不会覆盖另一个进程的虚拟内存

确定:共享信息困难,进程控制和IPC开销很高

基于I/O多路复用的并发编程

csapp 第12章 并发编程 读书笔记

I/O多路复用技术的优劣

优点

  • 比基于进程的设计给了程序员更多的对程序行为的控制
  • 运行在单一进程上下文中,容易共享数据,方便调试

缺点

  • 编码复杂
  • 不能充分利用多核处理器

基于线程的并发编程

csapp 第12章 并发编程 读书笔记

csapp 第12章 并发编程 读书笔记

csapp 第12章 并发编程 读书笔记

csapp 第12章 并发编程 读书笔记

csapp 第12章 并发编程 读书笔记

csapp 第12章 并发编程 读书笔记

csapp 第12章 并发编程 读书笔记

用信号量同步线程

csapp 第12章 并发编程 读书笔记

csapp 第12章 并发编程 读书笔记

利用信号量来调度共享资源

  • 生产者-消费者问题
  • 读者-写者问题

使用线程提高并行性

  • 并行程序的加速比

Sp=T1Tp S_p = \frac{T_1}{T_p}

  • 效率

Ep=Spp=T1pTp E_p = \frac{S_p}{p} = \frac{T_1}{pT_p}

其他并发问题

四个线程不安全函数类

  • 第1类:不保护共享变量的函数
  • 第2类:保持跨越多个调用的状态的函数
  • 第3类:返回指向静态变量的指针的函数
  • 第4类:调用线程不安全函数的函数