程序的顺序执行和并发执行
在说并发与并行之前,先说一下程序的顺序执行和并发执行吧
顺序执行:程序按照一定的次序执行,具有顺序行、封闭行和可再现性
并发执行:程序的并发执行是指多个程序在一个内核上在同一时间间隔内同时执行,极大的提高了资源利用率,由于程序并发执行带来的不可再现行,所以引入了进程这一概念对并发执行的程序进行控制和描述
进程
定义:
1、是程序的一次动态执行
2、由程序和程序描述状态(PCB)组成
特点:
1、动态性:进程是程序运行的动态描述,具有一定的生命周期,具有最基本的三种状态:就绪、运行、阻塞/等待
2、并发性:多个进程实体同时存在与内存中,能在同一时间内同时执行
3、独立性:进程是能够独立运行、独立分配资源和独立接受调度的基本单位
4、异步性:进程可按照各自速度向前推进,虽然如此,但是OS必须保证进程并发执行的结果是可再现的
区别程序
程序是一段代码,静态的占有磁盘空间
进程是程序的动态执行描述,占有计算机的各种资源,是资源分配的基本单位,具有不同的状态,由程序和状态描述组成
进程的基本状态及相互转换
进程具有最基本的三态:就绪、运行、等待,这是任何支持并发的操作系统都具备的
就绪:进程已经获得了除CPU外的所有计算机资源,如果获得CPU控制权就可以运行
运行:进程已经在CPU上运行
等待:进程在等待外部事件的响应,如I/O请求,此时即使获得CPU控制权也不会运行
状态转换:当处于就绪状态的进程收到OS的进程调度,转换为运行态,在CPU上运行,当运行态的进程时间片到或者被中断,会让出CPU时间片,转为就绪态,当运行态的进程运行到需要服务请求时(如I/O),则会转换到等待态,当等待态的进程需要的服务得到响应,转换为就绪态
线程
定义:
线程被看作是“轻量级的进程”,资源开销比较小,能减少程序并发执行时的开销
是系统内核分配的最小单元,也可以利用计算机的多核资源
进程和线程的比较
一个进程中可包含多个线程,线程共享进程的资源
调度性:传统OS中,进程是计算机资源分配和调度的基本单位,而在支持多线程的OS中,线程是调度的基本单位;在每次调度时,进程开销更大,同一进程中的线程可以相互切换,代价更小
并发性:进程可以并发执行,线程也可以并发执行,且同一进程中的线程也可以,不同进程的也可以,增加了并发行,
资源:进程是系统分配资源的基本单位,线程作为进程的一部分,并不直接拥有系统资源,而是只拥有一点必不可少、保证独立运行的资源,如TCB,同时在同一进程中的多个线程相互分享进程的资源
独立性:同一进程的线程的独立性要比不同进程低得多,因为每个进程都有独立的空间和资源,但是线程确实共享同一进程的内存地址和资源
系统开销:进程系统开销更大。进程每次创建和撤销都设计PCB、分配和回收其他资源(如内存和I/O),进程切换时设计到在不同状态队列中转换,