进程(process)是指计算机中已运行的程序。在面向进程设计的系统中,进程是程序的基本执行实体;在面向线程设计的系统中,进程本身不是基本运行单位,是线程的容器。
线程(thread)是操作系统能够进行运算调度的最小单位。他被班汉在进程之中,是进程中实际运作的单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
一个进程至少有一个线程(主线程),也可以有多个线程;一个线程必须又一个父进程。多个进程可以并发执行;一个线程可以创建和撤销另一个线程;同一个进程中多个线程之间可以并发执行
根本区别:进程是操作系统资源分配的基本单位,线程是任务调度和执行的基本单位
开销方面:创建或撤销进程时,系统都要为之分配和回收资源,导致系统开销明显大于创建或撤销线程。每个进程有独立的程序上下文,进程之间切换会有较大的开销;线程可以看作轻量级的进程,线程共享进程的上下文,每个线程有独立的运行栈和程序计数器,线程之间切换的开销相对较小。
环境方面:操作系统中能同时运行多个进程;同一个进程中有多个线程同时运行,但是是通过CPU调度,在每个时间片段中只有一个线程执行。
资源分配方面:系统运行时回味每个进程分配不同的内存空间;而线程除了CPU外,系统不会为线程分配内存,线程使用的资源来自所属进程,线程之间可以共享资源。