linux基础——linux进程与线程的区别与联系

进程和线程的区别与联系:

1、从属:一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。

1、调度:在传统的操作系统中,拥有资源和独立调度的基本单位都是进程。在引入线程的操作系统中,线程是独立调度的基本单位,进程是资源拥有的基本单位。在同一进程中,线程的切换不会引起进程的切换。在不同进程中进行线程切换,如从一个进程内的线程切换到另一个进程的线程时,会引起进程切换。

2、拥有资源:无论是传统的操作系统还是有线程的操作系统,进程都是资源拥有的基本单位,这些资源主要包括程序的代码、程序的全局内存和堆内存、栈以及文件描述符等等。而线程不拥有系统资源或者说只包含执行环境所必需的信息,主要包括进程中标志线程的线程ID、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、errno变量以及线程私有数据,线程与同属一个进程的其它的线程共享进程所拥有的全部资源。ps.栈主要用来存放局部变量和临时变量。

3、地址空间:进程的地址空间之间相互独立,一个进程崩溃后,在保护模式下不会对其它进程产生影响。而线程只是一个进程中的不同执行路径,没有自己单独的地址空间,一个线程死掉等于整个进程死掉,所以多进程的程序要比多线程的程序健壮。

4、并发性:在引入线程的操作系统中,不仅进程之间可以并发执行,而且多个线程直接也可以并发执行,从而可以使操作系统具有更好的并发性,从而更有效地使用系统资源和提高了系统的吞吐量。

5、系统开销:创建进程时必须给它分配独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段。撤销进程时系统还要为之回收资源,如内存空间、I/O设备等,而运行于一个进程的多个线程,它们之间彼此使用相同的地址空间,共享大部分数据,因此系统启动一个线程所花费的开销远小于进程。类似的,在进程切换时涉及当前执行进程CPU环境的保存及新调度到进程CPU环境的设置,而线程切换只需要保存和设置少量寄存器内容,开销很小。此外,由于同一个进程内的多个线程共享进程的地址空间,因此,这些线程之间的通信和同步非常容易实现,甚至无需操作系统的干预。

6、通信方面:因为不同的进程拥有独立的数据空间,所以进程间通信(IPC)必须使用操作系统提供的复杂机制(管道、匿名管道、消息队列、信号量、共享内存、内存映射以及socket等)才能实现内存和文件描述符的共享,但是线程可以和隶属于同一个进程的其它线程共享进程所拥有的全部资源(注意要同步)。


参考:

http://blog.csdn.net/forrest2009/article/details/6413756
http://www.cnblogs.com/way_testlife/archive/2011/04/16/2018312.html
《unix环境高级编程》

你可能感兴趣的:(linux)