第十二章 并发编程

1. 基于进程的并发编程

在父进程中接受客户端连接请求,然后创建一个新的子进程来为每个客户端提供服务。

优劣:
1. 父子进程间共享文件表,但是不共享用户地址空间。进程有独立的地址空间既是优点也是缺点:一个进程不可能覆盖另一个进程的虚拟存储器,这就消除了许多令人迷惑的错误;独立的地址空间使得进程共享状态信息变得更加困难,为了共享信息,必须使用显示的IPC机制。
2. 比较慢,因为进程控制和IPC的开销很高。

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

基本思路:使用select函数,要求内核挂起进程,只有在一个或多个I/O事件发生后,才将控制返回给应用程序。

2.1 基于I/O多路复用的并发事件驱动服务器

I/O多路复用可以用做并发事件驱动(event-driven)程序的基础。

优:
1. 事件驱动设计的一个优点是,它比基于进程的设计给了程序员更多的对程序行为的控制。
2. 一个基于I/O多路复用的时间驱动服务器是运行在单一进程上下文的,因此每隔逻辑流都能访问该进程的全部地址空间,使得在流之间共享数据变得容易。
3. 一个与作为单个进程运行相关的优点是,可以利用熟悉的调试工具,例如GDB,来调试你的并发服务器,就像对顺序程序那样。
4. 事件驱动设计常常比基于进程的设计要高效的多,因为它们不需要进程上下文切换来调度新的流。

劣:
1. 事件驱动设计的一个明显缺点是编码复杂。
2. 不能充分利用多核处理器。

3. 基于线程的并发编程

线程是运行在进程上下文中的逻辑流,线程由内核自动调度。
每个线程都有它自己的线程上下文,包括线程ID、栈、栈指针、程序计数器、通用目的寄存器和条件码。
所有运行在一个进程里的线程共享该进程的整个虚拟地址空间,包括代码、数据、堆、共享库、打开的文件。

线程执行不同于进程:
1. 线程上下文比进程上下文小得多,献策的上下文切换比进程上下文切换快得多。
2. 一个进程相关的线程组成一个对等线程池,独立于其他线程创建的线程。对等线程池的主要影响是,一个线程可以杀死他的任何对等线程,或者等待它的任意对等线程终止。
3. 每个对等线程都能读写相同的共享数据。

4. 预线程化(prethreading)技术

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值