您的位置:首页 > 其它

操作系统学习:线程 与 进程

2014-08-21 10:45 239 查看
进程是资源管理的最小单位,线程是程序执行的最小单位。

在操作系统设计上,从进程演化出线程,最主要的目的就是更好的支持SMP(双CPU系统,实际上是对称多处理机系统中最常见的一种)以及减小(进程/线程)上下文切换开销。

1.进程是程序的一次执行。                 线程可以理解为程序中的执行的一段程序片段。

2.进程间是独立的,这表现在内存空间、上下文环境上;     线程运行在进程空间内。

3.一般来讲,进程无法突破进程边界存取其他进程内的存储空间;而线程由于处于进程空间内,所以同一个进程所产生的线程共享同一内存空间。同一进程中的两段代码不能够同时执行,除非引入线程。

4.线程是属于进程的,当进程退出时该进程所产生的线程都会被强制退出并清除、线程占用资源要少于进程所占用的资源、进程和线程都可以有优先级。

线程与进程的区别归纳:

a.地址空间和其它资源:进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。

b.通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。

c.调度和切换:线程上下文切换比进程上下文切换要快得多。

d.在多线程OS中,进程不是一个可执行的实体。

进程和线程的主要差别在于它们是不同的操作系统资源管理方式

进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。

线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。

但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

线程和进程的区别是什么?

进程可以认为是程序执行时的一个实例。进程是系统进行资源分配的独立实体, 且每个进程拥有独立的地址空间。一个进程无法直接访问另一个进程的变量和数据结构, 如果希望让一个进程访问另一个进程的资源,需要使用进程间通信,比如:管道,文件, 套接字等。

一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。 线程与进程的一个主要区别是,同一进程内的多个线程会共享部分状态, 多个线程可以读写同一块内存(一个进程无法直接访问另一进程的内存)。同时, 每个线程还拥有自己的寄存器和栈,其它线程可以读写这些栈内存。

线程是进程的一个特定执行路径。当一个线程修改了进程中的资源, 它的兄弟线程可以立即看到这种变化。

以下是分点小结:

进程是系统进行资源分配的基本单位,有独立的内存地址空间; 线程是CPU调度的基本单位,没有单独地址空间,有独立的栈,局部变量,寄存器, 程序计数器等。
创建进程的开销大,包括创建虚拟地址空间等需要大量系统资源; 创建线程开销小,基本上只有一个内核对象和一个堆栈。
一个进程无法直接访问另一个进程的资源;同一进程内的多个线程共享进程的资源。
进程切换开销大,线程切换开销小;进程间通信开销大,线程间通信开销小。
线程属于进程,不能独立执行。每个进程至少要有一个线程,成为主线程

操作系统的设计,因此可以归结为三点:

(1)以多进程形式,允许多个任务同时运行;

(2)以多线程形式,允许单个任务分成不同的部分运行;

(3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。

参考资料:

http://jingyan.baidu.com/article/624e74598efcc834e9ba5a66.html

http://www.cnblogs.com/lmule/archive/2010/08/18/1802774.html

http://www.cricode.com/2410.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: