操作系统拾遗之进程和线程
2009-11-04 00:00:00 来源:WEB开发网核心提示:摘要昨天晚上,室友说起了白天在百度面试时问到的一个问题, 也就是进程和线程的本质区别是什么? 我想了想, 不假思索地就以为进程之间没有共享地址空间, 也就是具有独立的地址空间, 而线程之间是共享地址空间的, 室友点头又摇头, 说了一句我没有听过的说法Linux中进程和线程是没有本质区别的,二者都是共享地址空间的. 于是
摘要
昨天晚上,室友说起了白天在百度面试时问到的一个问题, 也就是 进程和线程的本质区别是什么? 我想了想, 不假思索地就以为 进程之间没有共享地址空间, 也就是具有独立的地址空间, 而 线程之间是共享地址空间的, 室友点头又摇头, 说了一句我没有听过的说法 Linux中进程和线程是没有本质区别的,二者都是共享地址空间的. 于是,我相当疑惑地重新翻阅了相关的资料,然后写出本文和大家一起分享.
如果你对进程和线程已经十分熟悉,请直接略过.
进程和线程的定义
首先我们先要弄清楚二者的定义, 究竟什么是进程, 什么又是线程?
根据 wikipedia process 中的定义, 进程是一个计算机程序的实例,由一个或者多个线程组成.
同样在 wikipedia thread 中对线程的定义是: 线程的执行是由计算机的fork操作来将一个程序生成一个或者多个并发的运行任务.
在单核的计算机中, 线程并非 真正并行 的, 而是 分时的并发, 示意图如下:
也就是说多个线程无需等待另一个线程的完成,而只需要等待CPU的时间片.
在多核的计算机中,多个线程可以真正的并行,也就是同时执行,同时获得CPU时间片.
同样, 在现代计算机中, 通常都是 分时操作系统 (time sharing), 也就是不同的进程通过时间片来获得CPU的控制权, 来执行自己的代码. 同样,单核的系统进程也只能是并发的, 而多核的系统可以达到并行.
更多精彩
赞助商链接