linux 线程与进程的简单区别

一、进程与线程的区别

一个进程至少包含一个线程,线程可以在同一时刻做不止一件事情;进程是线程的容器,里面可以包含很多个线程。

进程:是资源分配的最小单位
线程:是程序执行的最小单位

区别一:

进程:父进程创建子进程(fork()函数创建子进程),是拷贝整个内存空间,后面进行优化成了写实拷贝。

线程:本身不具有内存空间,都是共享进程的内存空间。

区别二:

进程:进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其他进程产生影响。

线程:线程有自己的堆栈和局部变量,但没有独立的地址空间,多个线程是共享进程的内存空间,一个线程崩溃后,整个进程崩溃。

所以多进程的程序要比多线程的程序强壮,例如在多进程中一个进程出现段错误后,不会影响其他进程运行,而多线程中,一个线程出现段错误后整个进程崩溃。

区别三:

进程:进程在切换时资源消耗大,要开辟新的空间,所以效率要差一些。

线程:是寄生在一个进程中的,会共享数据,不用开辟新的内存空间,效率要高一些。

二、使用多线程的理由

1.线程是一种节俭的多任务操作方式,使用进程中相同的内存空间,所以线程切换快;而进程是一种昂贵的多任务方式,启动一个新的进程,需要分配独立的地址空间,建立众多的数据来维护他的代码段,堆栈段,数据段,所以进程间切换较慢。

2.因为线程之间数据共享,所以数据之间的通信就变得简单,而进程是新开辟了内存,要进行数据通信的话比较麻烦,要用到管道,共享内存等的通信,去调用API。

你可能感兴趣的:(linux,c,多线程,多进程,linux)