首页 > 代码库 > 进程&线程

进程&线程

 

一个程序至少有一个进程,一个进程至少有一个线程.

进程拥有独立内存   线程共享内存(效率高)

 

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

 

线程只能归属于一个进程并且它只能访问该进程所拥有的资源,一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

 

主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。

 

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

 

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

 

做个比喻:

进程是个工厂车间,线程是车间内的工人。

车间拥有独立的空间,众多工人共享车间的空间与资源,相当于线程共享进程的内存空间。

但是一些空间是有限的比如测试有时只能同时容纳一个人,这个时候可以给厕所上锁。这就是互斥锁mutex!

当然也有一些空间可以容纳多人比如一个生产线,一条生产线可以容纳N个人,那么每上线一人机器被占用一个,下线时机器释放一个。一共有N台机器可用就是信号量的概念semaphore!

其实mutex是特殊的semaphore即N=1.

 

进程&线程