三种构造并发程序的方法及其优缺点
1、进程
用这种方法,每个逻辑控制流都是一个进程,由内核来调度和维护。因为进程有独立的虚拟地址空间,想要和其他流通信,控制流必须使用某种显式的进程间通信机制。
优点:
由于进程有独立的地址空间,所以一个进程不可能不小心覆盖另一个进程的虚拟内存,这就消除了许多令人迷惑的错误
缺点:
(1)还是由于进程有独立的地址空间,使得进程共享状态信息变得更加困难。为了共享信息,它们必须使用显式的 IPC(进程间通信)机制。
(2)由于进程控制和 IPC 的开销很高,所以这种方式比较慢
2、I/O 多路复用
在这种形式的并发编程中,应用程序在一个进程的上下文中显式地调度它们自己的逻辑流。逻辑流被模型化为状态机,数据到达文件描述符后,主程序显式地从一个状态转换到另一个状态。因为程序是一个单独的进程,所以所有的流都共享同一个地址空间。
优点:
(1)比基于进程的设计给了程序员更多的对程序行为的控制。
(2)一个基于 I/O 多路复用的事件驱动服务器是运行在单一进程上下文中的,因此每个逻辑流都能访问全部地址空间。这使得在流之间共享数据变得很容易。
(3)一个与作为单个进程运行相关的优点是,你可以利用熟悉的调试工具,例如 GDB,来调试你的并发服务器,就像对顺序程序那样。
(4)事件驱动设计常常比基于进程的设计要高效得多,因为它们不需要进程上下文切换来调度新的流
缺点:
(1)编码复杂
(2)不能充分利用多核处理器
3、线程
线程是运行在一个单一进程上下文中的逻辑流,由内核进行调度。你可以把线程看成是其他两种方式的混合体,像进程流一样由内核进行调度,而像 I/O 多路复用一样来共享同一个虚拟地址空间。
优点:
(1)能充分利用多核服务器
(2)速度快
(3)线程间共享数据很便利
缺点:
由于在同一个进程中,故容易产生线程安全问题
进程间通信方式
1、匿名管道通信
2、高级管道通信
3、有名管道通信
4、消息队列通信
5、信号量通信
6、信号
7、共享内存通信
8、套接字通信
参考:
https://blog.csdn.net/violet_echo_0908/article/details/51201278