进程的非正式定义非常简单:进程就是运行中的程序。
程序本身是没有生命周期的,它只是存在磁盘上面的一些指令(也可能是一些静态数据)。是操作系统让这些字节运行起来,让程序发挥作用。
即使可以利用的CPU只有一个,操作系统也支持(伪)并发操作的能力。操作系统将一个单独的CPU变换成多个虚拟的CPU。
进程
操作系统为正在运行的程序提供的抽象,就是所谓的进程(process)。正如我们上面所说的,一个进程只是一个正在运行的程序。在任何时刻,我们都可以清点它在执行过程中访问或影响的系统的不同部分,从而概括一个进程。
所有现代的计算机经常会在同一时间做许多事情。举个例子。先考虑一个网络服务器(阿里巴巴)。从四面八方进入大量网页请求。当一个请求进入时,服务器检查其需要的网页是否在缓存中。如果是,则把网页发送出去。如果不是,则启动一个磁盘请求
以获取网页。然而,从CPU角度来看,磁盘请求需要漫长的时间。当等待磁盘请求完成时,其他更多的请求将会进入。如果有多个磁盘存在,会在满足第一个请求之前就接二连三地对其他的磁盘发出一些或所有的请求。很明显,需要一些方法去模拟并控制这种并发。进程(特别是线程)在这里就可以产生作用。
事实表明,人们常常希望同时运行多个程序。比如:在使用计算机或者笔记本的时候,我们会同时运行浏览器、邮件、游戏、音乐播放器,等等。实际上,一个正常的系统可能会有上百个进程同时在运行。如果能实现这样的系统,人们就不需要考虑这个时候哪一个CPU 是可用的,使用起来非常简单。所有的这些活动需要管理,于是一个支持多进程的多道程序系统
就很有用了。
在任何多道程序设计系统
中,CPU由一个进程快速至另一个进程,使每个进程各运行几十或几百个毫秒
。严格地说,在某一个瞬间,CPU只能运行一个进程
。但在1秒钟期间,它可能运行多个进程
,这样就产生并行的错觉
。
makefile
并发: 一段时间内,有多个进程在执行。如果时间短, 给人感觉是同时执行。
并行: 一个时刻,有多个进程在执行。
单个CPU、多个CPU都可以实现并发
。
单个CPU,没法实现并行。因为在某一个时刻,只能执行一个进程。
为了执行其他程序,CPU必须要做切换。这样在一段短的时间内,可以多个进程在执行,这叫并发。
只有在多个CPU的时候,多核处理器, 就会达到在同一个时刻,有多个进程在执行。这叫并行。
进程的组成
- 程序的代码;
- 程序处理的数据;
- 程序计数器中的值,指示下一条将运行的指令;
- 一组通用的寄存器的当前值,堆,栈;
- 一组系统资源(如打开的文件)
进程的特点
- 动态性:可动态地创建,结果进程;
- 并发性:进程可以被独立调度并占用处理机运行;(并发:一段,并行:一时刻)
- 独立性:不同进程的工作不相互影响;(页表是保障措施之一)
- 制约性:因访问共享数据 / 资源或进程间同步而产生制约。