操作系统拾遗之进程和线程
2009-11-04 00:00:00 来源:WEB开发网核心提示: 进程和线程的联系二者的关系可以简单的一句话概括为,通常, 一个进程可以包括多个线程, 一个线程只能属于一个进程.一个进程可以生成多个线程,而这些线程之前共享地址空间和相应的资源, 在线程切换时, 并没有太多的开销.图1: 进程的执行空间示意图图2: 线程的执行空间示意图从上面2个图可以很清楚地看
进程和线程的联系
二者的关系可以简单的一句话概括为, 通常, 一个进程可以包括多个线程, 一个线程只能属于一个进程.
一个进程可以生成多个线程,而这些线程之前共享地址空间和相应的资源, 在线程切换时, 并没有太多的开销.
图1: 进程的执行空间示意图
图2: 线程的执行空间示意图
从上面2个图可以很清楚地看到, 进程和线程在共享地址空间和资源的区别.
那么, 对于同样一个应用,我们可以选择 进程 来实现, 也可以选择 线程 来实现, 那么二者有什么区别呢? 我们应该如何选择呢?
进程和线程的区别
从本质上说,二者只是在 是否共享地址空间,及共享多少地址空间 上是有差别的,而至于其它的区别也都是 因为这个本质区别来引起的. 下面逐一地进行简单的说明.
关于共享地址空间
传统意义上, 进程之间是不共享地址空间的, 而线程是共享着进程的地址空间.
但是在Linux中, 会有不同, 请参考下面 特定操作系统的进程和线程 部分的详细说明.
安全性
因为进程之前是不共享资源和地址空间的,所以不会存在太多的安全问题(相比于线程).
而由于多个线程共享着相同的地址空间和资源,所以会存在线程之间有可能会恶意修改或者获取非授权数据的可能.
这也就是为什么近期, chrome和IE8相继开始使用多进程来替代之前的多线程(不同的tab之间).
更多精彩
赞助商链接