第12章——并发编程

  • 如果逻辑控制流在时间上重叠,那么它们就是并发的
  • 使用应用级并发的应用程序称为并发程序,现在操作系统提供三种基本的构造并发程序的方法:进程、I/O多路复用、线程

基于进程的并发编程

  • 一个构造并发服务器的自然方法就是,在父进程中接受客户端连接请求,然后创建一个新的子进程来为每个新客户端提供服务

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

  • 使用select函数,要求内核挂起进程,只有在一个或多个I/O事件发生后,才将控制返回给应用程序
  • 并发粒度就是读一个完整的文本行所需要的指令数量

基于线程的并发编程

  • 线程是运行在进程上下文中的逻辑流
  • 每个进程开始生命周期时都是单一线程,这个线程称为主线程。在某一时刻,主线程创建一个对等线程,从这个时间点开始,两个线程就并发的运行。最后,因为主线程执行一个慢速系统调用,或者因为被系统的间隔计时器中断,控制就会通过上下文切换传递到对等线程

多线程程序中的共享变量

  • 一组并发线程运行在一个进程的上下文中,每个线程都有它自己独立的线程上下文,每个线程和其他线程一起共享进程上下文的剩余部分

用信号量同步线程

  • 进度图将n个并发线程的执行模型化为一条n为笛卡尔空间中的轨迹线
  • 信号量是具有非负整数值的全局变量,只能有两种特殊的操作来处理,这两种操作称为P和V
  • 信号量提供了一种很方便的方法来确保对共享变量的互斥访问,基本思想是将每个共享变量与一个信号量s联系起来,然后用P(s)和V(s)操作将相应的临界区包围起来
  • 生产者-消费者问题:生产者产生项目并把它们插入到一个有限的缓冲区中,消费者从缓冲区中取出这些项目,然后消费它们
  • 读者-写者问题:一组并发的线程要访问一个共享对象,有些线程只读对象,称为读者,其他的线程只修改对象,称为写者,写者必须拥有对对象的独占访问

使用线程提高并行性

  • 并行程序是一个运行在多个处理器上的并发程序,并行程序的集合是并发程序集合的真子集
  • 同步开销巨大,要尽可能避免。如果无可避免,必须要用尽可能多的有用计算弥补这个开销

其他并发问题

  • 一个函数被称为线程安全的,当且仅当被多个并发线程反复地调用时,它会一直产生正确的结果
  • 可重入函数:当它们被多个线程调用时,不会引用任何共享数据,可重入函数集合是线程安全函数的一个真子集
  • 死锁:一组线程被阻塞了,等待一个永远也不会为真的条件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值