WEB开发网
开发学院操作系统windows 2008 操作系统拾遗之进程和线程 阅读

操作系统拾遗之进程和线程

 2009-11-04 00:00:00 来源:WEB开发网   
核心提示: 上面其实已经讲得很清楚了,对于内核而言, 进程和线程是没有区别的在用户的角度而言,区别在于如何创建(clone), 如果使用是least shared,那么就类似于进程的创建(最少共享)如果使用的是most sharing那么就类似于线程的创建(最多共享)由于Linux内核开发人员的努力和优化,

上面其实已经讲得很清楚了,

对于内核而言, 进程和线程是 没有区别的

在用户的角度而言,区别在于如何创建(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

进程同步

进程中的线程可能会在运行中形成不同的资源, 所以需要进行同步来达到数据的一致, 即所谓的 进程同步.

进程的同步方式有很多不同的方法, 如信号量, 锁, 事件等.

结论

进程和线程是操作系统很重要的一个概念, 而在我们程序员的实际生活中也经常遇到,所以, 掌握 进程和线程及其区别是十分重要的. 希望这篇文章能够有一定的帮助.

上一页  1 2 3 4 5 

Tags:操作系统 拾遗 进程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接