基于进程的并发编程
构建并发程序最简单的方法就是用进程
进程有独立的地址空间既是优点也是缺点:
优点:
- 一个进程不可能会覆盖掉另一个进程的虚拟内存
缺点:
- 独立的地址空间使得共享状态变得困难
基于I/O多路复用的并发编程
优点:
- 比基于进程的设计给了开发者更多对程序行为的控制
- 运行在单一的进程上下文中,使得共享数据变得简单
缺点:
- 编码复杂
- 不能充分利用多核处理器
基于线程的并发模型
属于上述两种方式的混合
并发问题
包括:
-
线程安全:需要注意4类线程不安全函数:
- 不保护共享变量的函数
- 保持跨越多个调用状态的函数
- 返回指向静态变量的指针的函数
- 调用线程不安全函数的函数
-
可重入性:指函数被多个线程调用时,不会引用任何共享变量
-
使用已存在的库函数:标准C库中的函数大部分是线程安全的,有一小部分例外,需要注意
-
竞争:需要注意多线程的程序必须对任何可行的轨迹线都正确工作,而不只是开发者预想的某种特殊轨迹线
网友评论