操作系统拾遗之进程和线程
2009-11-04 00:00:00 来源:WEB开发网上面其实已经讲得很清楚了,
对于内核而言, 进程和线程是 没有区别的
在用户的角度而言,区别在于如何创建(clone), 如果使用是 least shared ,那么就类似于进程的创建(最少共享)
如果使用的是 most sharing 那么就类似于线程的创建(最多共享)
由于Linux内核开发人员的努力和优化, 创建, 切换, 关闭 进程和线程之前的开销差异已经十分的小了
如何选择
如果你看到了这里, 应该会对进程和线程有较深入的理解, 那么我们该如何在面对多任务问题时选择呢?主要请考虑下面几个因素:
安全性要求
健壮性要求
性能要求
具体的平台
熟悉上面的具体的细节然后结合自己的应用场景, 做出最优的选择(通常做不到最优,次优即可), 这样就能够较好利用好 并发性(单核)或者并行(多核).
相关的技术细节
在结束本文之前, 我想谈下进程和线程相关的一些技术细节.
COW
COW即, Copy On Write, 具体的介绍可以参考 Copy On Write.
简单地说, COW是对下面场景的一种优化:
多任务系统对于初始时相同资源的共享, 只有当某个任务写这个资源时(更新), 才会 主动地在这个任务本地拷贝一份资源,从而不影响其它的任务.
例如, 资源author="zhutao", 这个变量资源, 在初始时由A,B,C三个任务共享author这个资源,
如果在整个过程, A,B,C三个任务都没有更改author, 那么整个系统只保留一份author资源的copy.
如果在过程中,B有修改author资源的操作,那么B会主动拷贝一份author, 然后再更改拷贝后author, 此时整个系统有2份author资源的copy.
以此类推, 一旦有更改的操作都会生成一份新的copy
那么从这个机制来看,它明显地有如下优势:
无需完全为每个任务生成资源拷贝, 而只是当修改时再生成拷贝
提高了任务之间切换的效率
提高了系统资源的利用率
其它
这个机制在Linux下已经得到了广泛的应用,这也是为什么Linux下进程和线程的开销差异小的原因.
线程安全(thread safety)
这个之前已经讨论过了,请参考我的博文 线程安全及Python中的GIL
进程同步
进程中的线程可能会在运行中形成不同的资源, 所以需要进行同步来达到数据的一致, 即所谓的 进程同步.
进程的同步方式有很多不同的方法, 如信号量, 锁, 事件等.
结论
进程和线程是操作系统很重要的一个概念, 而在我们程序员的实际生活中也经常遇到,所以, 掌握 进程和线程及其区别是十分重要的. 希望这篇文章能够有一定的帮助.
更多精彩
赞助商链接