进程和线程
概念:
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
从狭义来讲
进程是正在运行的程序的实例
线程(Thread)
通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源,在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度。
进程与线程的区别
1. 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
2. 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线
3. 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些进程级的资源(如打开文件和信
号等),某进程内的线程在其他进程不可见;
4. 调度和切换:线程上下文切换比进程上下文切换要快得多
现实映射和理解
之前进程、线程一直傻傻分不清楚。
其实差的就是把概念映射到现实当中。
比如我们打开了一个应用,这个应用在任务管理器里可以看到的就是进程:
而线程是看不见的,一个进程包含了若干个线程,线程没有自己的资源,用的是进程的资源。
打个比方,进程和线程的关系,就像古代时候:
进程是一个家族,线程是里面干具体事情的人,出去买菜要钱,钱是老爷的,钱从家族那里拿,拿到了去买菜。
然后外面就知道镇上有个家族,家族的家主叫某某某,是不会记得在下面干活的具体谁谁谁的。
家主可以和其他家主打交道,家主不知道别的家主下面有什么人,除非那个人特别优秀,毕竟层次是不一样的。
家主代表的是一个家族,一个家族有很多人组成。而干活的人就只能一个具体的人了。
让一个人去干什么,很快。但是让一个家族决定去干什么,会比较困难。