记录一下个人对进程和线程之间的关系的理解,可能不对,望指正。
一、进程
以生产线为例,程序是整个车间的老大,车间不会是个空壳,他至少拥有一条生产线,而进程则是承包了某一条生产线的主管(该生产线上他是老大且需要对该生产线负责),可以自由走动并且给手下的员工安排各种任务(谁谁谁加班,谁谁谁拿奖金都是他来说了算的)。
所以一个程序至少拥有一个进程、进程是一个资源分配的独立的基本单位。
不过这个主管是一个懒人,而生产线上可能时不时就会有些事情得去解决,但是他从来不会自己亲自动手去解决任何事情,所以每个主管身边都配了一个小跟班去代他做事。
所以进程至少拥有一个线程,否则该进程无法被调度执行。
二、线程
线程是生产线上的小职员,主管(进程)会根据手头上的任务大小来招募(生成)或者遣散(销毁)线程去执行大任务重分流出来的小任务。线程则是完成任务的主力军(进程不亲自做任务)。
所以线程是系统调度和分配的最小单位
每个线程借助主管给的工具(资源)和主管给的地盘(地址空间)去完成主管分配的小任务,这些工具不是线程的而是属于进程的,而且这些工具是进程拿出来作为他们生产线上的共享资源的。虽然线程并不拥有这些,不过他也不是一无所有,线程拥有自己的工位(栈空间)和工号(执行序列)
所以进程是被分给并拥有资源的基本单元。同一进程内的多个线程共享该进程的资源,不过线程仅仅能使用这些资源而不拥有它们。但它拥有自己的栈空间和独立的执行序列。
线程在眼看自己的任务完成不了的时候,他也可以呼叫小伙伴(另一个线程)来帮助自己同时完成这个任务,在自己可以解决了的时候送走小伙伴。
所以一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.
三、联系与区别
一条生产线是被进程独立管理着的(拥有独立的地址空间),所以进程需要对该生产线负责,如果生产线上的某个线程因为任务压力什么的导致该线程崩溃了(线程没有独立的地址空间,只是一个进程中的不同执行路径),其所属的进程也会崩溃。
而由于进程独立承包了这条生产线,所以该进程崩溃并不会引起该车间内的其他进程产生崩溃。
虽然多进程比多线程程序要健壮一些,但是进程之间的切换产生的资源消耗较大,所以具体使用还需要好好斟酌。
可能不是很形象也有疏漏,望小伙伴们指点补充^-^