进程:百度百科说“进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。”,维基百科说“是计算机中已运行程序的实体。进程本身不会运行,是线程的容器。”
线程:百度百科说“线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元”,维基百科说“是操作系统能够进行运算调度的最小单位。它被包涵在进程之中,是进程中的实际运作单位。”。
在弄清楚这些名词前,我们先看看是如何产生的。
在计算机刚诞生时,计算机只能接受一些特定的指令并执行,当用户输入指令时,计算机只能等待,这样效率很低,然后人们开始想,是不是可以把指令写一个清单,交给计算机去执行,如此,有了批处理操作系统;但是这时人们又发现了一个问题,比如当一个程序需要耗时较长的I/O操作时,cpu只能等待其读完数据,这样效率无疑也是比较低的。再然后人们又开始想,是不是当一个程序等待资源时是不是可以让另一个程序运行,待之前的程序资源准备完毕时再让其运行,相当于是内存中不仅仅只运行一个程序?进程产生了,用进程来对应一个程序,每个进程对应一定的内存地址空间,且只能用自己的,各个进程不互相干扰,同时,进程保存了程序每个时刻的运行状态,这样进程间就可以切换了。这样用户用起来感觉像是计算机同一时间在执行多个任务,称之为“并发”。说明:对于单核cpu来说,事实上一个时间只有一个进程占用cpu。
再然后,人们对计算机的实时性要求更高了,虽然可以执行多个进程了,但是执行一个进程时,一个进程一个时间段内只能做一件事情,那么可不可以再把进程切分成多个子任务,并发执行呢?于是人们又发明了线程,通过线程之间的切换,让用户感觉系统同时在做很多件事情。
进程让操作系统的并发性成为可能,线程让进程内部并发成为可能。
现在再看上面的解释,进程是系统资源分配和调度的基本单位,每个进程都独享自己的资源;一个进程可以包括多个线程,而线程是系统运算调度的最小单位,所以进程内部的多个线程是共享进程的资源的。
当然,上面的解释都要和物理设备相关,比如,cpu是单核的还是多核的等。
下面看一张资源监视器的图:
通过这张图可以很直观的看出,一个eclipse进程包含多个线程。进程和线程不是一个量级的对象,所以个人认为没有必要放在一起比较,和类和对象的关系比较类似。