进程是线程的容器
进程(Process)和线程(Thread)都是操作系统中的基本概念,它们之间有一些优劣和差异。
进程基本介绍
进程是程序执行时的一个实例,是系统进行资源分配的基本单位。所有与该进程有关的资源,都被记录在进程控制块(PCB)中。以表示该进程拥有这些资源或正在使用它们。另外,进程也是抢占处理机的调度单位,它拥有一个完整的虚拟地址空间。当进程发生调度时,不同的进程拥有不同的虚拟地址空间,而同一进程内的不同线程共享同一地址空间。
线程基本介绍
线程,有时也被称为轻量级进程,是程序执行流的最小单元,是进程中的一个实体,是被系统独立调度和分派的基本单位。与进程不同,线程与资源分配无关,线程自己不拥有系统资源,它属于某一个进程,并与进程内的其他线程一起共享进程的资源。线程只由相关堆栈(系统栈或用户栈)寄存器和线程控制表TCB组成。
进程和线程的关系
通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。但是,一个线程只属于一个进程。进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。而且需要注意的是,线程不是一个可执行的实体。
我们生活中有许许多多关于进程与线程的小栗子,比如:1.我们使用打开一个微信软件,这个时候就开启了一个进程, 当我们在微信里面进行各种操作(查看朋友圈,扫一扫...),这么多的操作就是线程。 所以我们可以说“进程”是包含“线程”的,“线程”是“进程”的一个子集。
进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。
线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位。
线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程——程序执行的最小单位。
进程与线程又在哪些方面有区别呢?
1.个体单位
简而言之,进程是资源分配的单位,线程是CPU调度的单位。
如果这样说不便于理解的话,我们不妨将进程看做一个生产车间,线程看做车间里面的若干个生产线其中的一个,我们需要完成的server看作生产部门,那么对于我们要完成的server,需要由好几个车间里的若干个生产线完成,资源的分配自然是按车间来分配,每个车间都有自己的任务量,根据任务有自己拿到的资源,这些资源一般情况下供自己车间使用,正如我们进程之间的资源不共享一样,所以说,进程是资源的分配单位。而生产线就是完成server的一条条流程,是完成server的独立的最小的单位,工作时是给每个线程分配具体的工作内容,每个车间内的资源是共享的,生产线可以根据自己的工作能力来获取资源,所以说线程是CPU调度的单位。
2.切换效率
线程的切换效率比进程高。
线程之所以切换效率高于进程,是由于线程的切换是指令之间的切换,即从一段执行序列(程序)切换到另一段执行序列(程序),而内存映射表不变;但是进程的切换包括指令的切换和内存(映射表)的切换(资源的切换),这相对于线程切换来说,效率就会降低很多。
3.地址空间:同一进程的所有线程共享本进程的地址空间,而不同的进程之间的地址空间是独立的。
4.资源拥有: 同一进程的所有线程共享本进程的资源,如内存,CPU,IO等。进程之间的资源是独立的,无法共享。
5.执行过程:每一个进程可以说就是一个可执行的应用程序,每一个独立的进程都有一个程序执行的入口,顺序执行序列。但是线程不能够独立执行,必须依存在应用程序中,由程序的多线程控制机制进行控制。
6.安全性:因为同一进程的所以线程共享此线程的资源,因此当一个线程发生崩溃时,此进程也会发生崩溃。 但是各个进程之间的资源是独立的,因此当一个进程崩溃时,不会影响其他进程。因此进程比线程健壮。
7.进程之间相互独立,不存在数据安全问题,相对于线程而言,创建时,开辟的资源多,CPU调度慢,如果多进程要进行通讯,必须借助特定的手段(信号,信号量,共享内存,管道,消息队列)。