【Linux】进程与线程的本质区别?

简而言之,线程是进程的一部分,进程是程序的一部分。

异同:
1、进程是资源分配的基本单位,而线程是调度的基本单位;

2、进程与进程之间是独立的,一个进程的异常终止不会影响其它进程,而线程与线程之间大部分是共享的,一个线程的异常终止会影响其它线程,会使进程终止;

3、线程与线程大部分共享,但是也有一部分数据私有,线程ID、上下文(切换时候寄存器中的值)、自己独享一个栈空间、错误码、信号屏蔽字、调度的优先级;

4、调度和切换:线程上下文切换比进程上下文切换要快得多;

5、一个进程中有多个线程时候,线程共享以下,在进程与进程之间的切换所花费消耗的大于线程与线程之间切换的花销。

6、线程比进程占用的资源要小,一个线程的创建远小于进程的创建;
7、进程与进程之间是独立的,所以在并发过程中,用同步互斥少,相对安全,代码编写容易。线程之间大多数资源共享,所以往往要加上同步互斥锁;
8、线程创建出来的线程是平等的没有上下级,而进程创建出进程就为该进程的子进程。
联系
1、进程与线程之间的关系:线程是存在进程的内部,一个进程中可以有多个线程,一个线程只能存在一个进程中;
2、一个线程的结束进程不一定会退出,但是进程的退出,线程将退出;
3、一个进程中的多个线程共享:

1)一个进程中线程与线程之间共虚拟地址空间;

2)共享文件描述符

3)每种信号的处理方式

4)当前的工作目录

5)用户ID和组ID;
4、进程资源,防止造成僵尸进程。而线程也要进行等待,释放线程的资源(除过线程的分离)。
 

详述:https://my.oschina.net/cnyinlinux/blog/422207

你可能感兴趣的:(Linux)