什么是进程
在百度百科中,进程有两种定义,一种是狭义定义:进程是正在运行的程序实例,比如微信、Tomcat、MySQL,这些就是一个个进程。另一种就是广义的定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,它是操作系统动态执行的基本单元。在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
进程主要有两个特点,一是进程是一个实体,操作系统会为它分配独立的地址空间,二是进程是一个执行中的程序,程序是没有生命的实体,只有当处理器赋予它生命,它才是一个活动的实体,这个实体才叫做进程。
进程的来由
最初计算机被设计出来是为了解决数学计算问题的,当用户输入特定的指令,计算机执行一个操作,在用户输入指令或思考等耗时的操作时,计算机是一直处于等待的状态,这样显然是浪费计算机资源的表现,计算机的使用效率特别的低。
后来,为了解决这个问题,出现了批处理操作系统。在批处理操作系统中,用户可以预先准备需要执行的一系列操作指令以及数据,一次性的让计算机执行,这样减少了用户设计、输入指令和数据的时间,进一步提升了计算机的使用效率。
但是,人们发现这样的设计还是存在一些问题,比如,当程序执行的过程中需要进行IO操作,而IO操作需要消耗的CPU资源是比较少的,大部分都是分派给DMA完成的。所以在这一段时间内,CPU是一直处于等待状态的。于是人们想,如果在执行IO操作的时候,是否可以让另一个任务执行,当IO操作完成,暂停当前的任务,在回到原来的任务继续执行。当然,这里存在着许多的问题,比如如何区分每个任务的的数据,当程序暂停后,如何保存之前的运行状态。
于是,进程的概念就出现了。上面说了,进程就是一个运行的程序实例,操作系统会为它分配一定的内存空间,这样每个程序之间就不会有数据干扰问题,并且进程会保存程序的运行状态,这样就可以进行进程的切换,当进程恢复的时候,就可以读取到之前的运行环境。
什么是线程
线程是程序执行流的最小单元,是一个单一的顺序控制流程。它是进程中的一个实体,是被系统独立调度和分派的基本单元,线程自己不拥有系统资源,但它可以和同属一个进程的其他线程共享进程的所有资源。
线程的来由
进程的出现极大的提高的计算机的工作效率,让程序可以在计算机中并发的运行,但是就一个独立的进程来看,其使用效率并不高效,因为进程还是一个顺序的执行体,一旦其中的某个操作需要耗时很久,进程就必须处于等待的状态。当线程出现之后,我们可以把那些耗时的操作放在一个线程中处理,程序还可以做其他的事情。
多线程
由于进程之间是独立的内存空间,不共享资源,所以多个进程的时候不需要考虑任何问题。但是对于一个进程中的多个线程,由于线程是共享进程中的所有资源的,所以如何让进程中的资源被多个线程正确的访问是我们在进行多线程设计中需要深入考虑的问题。