1. 概念
1.1 程序
代码、指令,静态的
1.2 任务
具体要做的实景,可以是基于进程、或基于线程
1.3 多任务
例如:当执行的程序执行I/O操作时,操作系统会将CPU资源分配给其他等待执行的程序
两种类型的多任务
基于进程:基于进程的多任务处理,是程序的并发执行
基于线程:基于线程的多任务处理,是同一程序的片段的并发执行
1.4 进程
进程:正在执行的应用程序,多任务操作系统可以控制各个进程的执行状态,如:终止某个正在执行的进程,启动某个暂停执行的进程
是动态的,程序的实例化
操作系统负责为每个进程分配独立的内存和其他资源(I/o设备,文件等)
进程执行完毕后,操作系统会将进程占用的资源全部回收
补充-早期多进程
早期的做任务操作系统,是以进程为单位管理各个程序的运行以及计算机的分配和回收
缺点:
- 操作系统将CPU资源从一个进程分配给另一个进程时,开销较大
- 各个进程占用的内存空间相互独立,进程间通信难度大
- 一个进程可能会执行多个任务(子任务),当某个任务因I/O操作暂停执行时,其他任务将无法执行(在无多线程的情况下)
1.5 线程
为解决早起多进程缺点,引入线程
线程:执行应用程序中的某个具体任务(进程:正在执行的应用程序)(具体任务:一段程序等)
一个进程可以有多个线程,线程之间共享进程的资源
1.5 线程/进程
进程之间独立
进程内为多个线程提供资源
进程内多个线程共享资源
进程内每个线程不同的具体任务
进程内各个线程可以拥有自己的独立私有资源
每个进程执行前,操作系统会为其分配所需的资源:程序代码、数据、内存空间、文件资源等
一个进程必须包含至少一个线程(主线程)
/*
公司(程序1):一个多进程的程序
进程1(工厂1)
- 线程1(工人1)
- 线程2(工人2)
进程2(工厂2)
- 线程3(工人3)
- 线程4(工人4)
*/
应用程序/系统资源
操作系统支持同时执行多个应用程序,为避免多个应用程序访问系统资源(文件资源、I/O设备、网络等)时产生冲突,操作系统会将可能产生冲突的系统资源保护起来,阻止应用程序直接访问
应用程序需要访问系统资源时,需要调用系统API
并发/并行/同步/异步
- 并发
计算机能够同时执行多项任务;
并发的形式有许多不同:单核处理器:时间分片的形式,一个任务执行一段时间,也就是任务交替进行。也被称为进程或者线程的上下文切换
多核处理器:在多个核心上,真正并行的执行任务,也就是以并行的形式实现并发
- 并行
多核心并行执行任务
- 同步
同步:必须等到前一个任务执行完毕之后,才能执行下一个任务
在同步中,没有并发和并行的概念
- 异步
不同任务之间,并不会相互等待,先后执行(即在执行任务A的时候,也可以同时执行任务B)
也就多线程编程
补充
多线程编程:多核心并发,适用于计算密集型应用程序
单线程异步编程:强制单核心并发,适用于I/O操作密集型应用程序
同步/异步/阻塞/非阻塞
阻塞/非阻塞:针对的是接收方(函数应对返回的方式)(阻塞:没有得到结果不返回;非阻塞:函数立即返回,循环查询)
同步/异步:针对的是发送方(函数调用的方式)(同步:没有结束就死等;异步;功能结果未知,结束后通知我)
(自我理解:同步的表现形式是阻塞,异步的表现形式是非阻塞)
进一步理解:
同步/异步:表示的读写(访问)数据的方式
阻塞/非阻塞:线程/进程 在等待 读写(访问)数据的状态
(我的理解:一般就是 同步阻塞 或 异步非阻塞)
(请求端(同步/异步);接收端的请求线程+接收端的处理线程(阻塞非阻塞))
并发/并行 和 同步/异步之间 并没有一个明确的关系