定义:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。 程序是指令、数据及其组织形式的描述,进程是程序的实体。
定义:线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并行多个线程,每条线程并行执行不同的任务。
特点:进程(Process)是操作系统分配资源的最小单位。
线程(Thread)是操作系统进行预算调度的最小单位。
我是这样理解进程和线程的:
把奥运会比作是一个操作系统,各国国家队比作是一个个进程,每个参赛队员比作是一个线程。
参赛名额是按照每个参赛的国家队分配的,参赛名额比作系统资源。
在奥运会进行期间(也就是系统运行期间),每个国家队都要参加不同的比赛项目,有的比赛项目是同时进行的,这时就需要这几个项目的运动员同时去参赛(多线程并行处理任务)。
有些项目例需要多个运动员按照顺序协作完成,例如4×100米接力,需要4个运动员按照顺序接力完成(接力棒可以看作是锁,持有锁的线程才可以运行,类似多线程串行执行)。
再举个例子,电线:
电线外面是绝缘的橡胶皮,这个橡胶皮就是进程,橡胶皮包裹着的一根一根铜线就是线程。
有的进程只有一个线程,就像只有一根铜芯的电线(单线程应用)。
而且负责导电这个工作的并不是进程(电线皮)而是线程(铜线导电)
而没有线程的进程,也是不存在的,没有铜芯儿的电线只是一根普通的橡皮管
这个例子也非常形象的说明了线程和进程之间关系
总结:
进程就是个容器,这个容器里装的都是线程。或者说,进程就是由线程组成的。
系统分配资源的时候不会单独给某个线程分配,而是把申请的资源一起分配给进程,进程内的线程们共享这些资源。
进程可以看作是一个正在运行的程序,哪怕这个程序是单线程的~~