什么是多任务
多个任务同时运行在同一个操作系统上
现在操作系统几乎全部是多任务
多任务的原理
串行:多个任务依次执行,前面的任务不执行结束后面的任务就不能开启
并行:多个任务同时执行,一个cpu某个时刻只能执行一个任务,并行需要多机系统支持,每开启一个任务就把这个任务放在指定cpu上运行
并发:多个任务在同一个cpu上交替执行;例如:一个操作系统同时开启了微信、QQ、默默等,QQ执行1ns让出cpu、然后微信执行1ns、然后默默执行1ns、
....依次类推;由于切换时间特别短,在宏观上来看好像是这些程序在同时执行,其实这些程序交替执行;并发的原理同一个cpu给多个任务分时复用
(以某个时间片为单位分配任务的执行周期)
多任务的技术实现
多进程 [什么是进程]
如果一个程序执行起来,首先操作系统会为其创建一个进程(或者多个进程),此时进程就是程序执行的单位;一个进程包括一个进程id、机器源码、各种资源;
- 执行流程:
- 进程执行起来以后,操作系统首先把程序的二进制机器源码放入内存的代码段,
- 然后系统给这个程序分配一个或者多个进程并且加上进程id,
- 然后根据机器源码中的说明给进程分配内存资源和I/O,
- 然后让进程和其他进程以并发的形式抢占处理机,一旦抢占到处理机资源就可以执行。
【说明】进程是操作系统分配资源的基本单位
多线程
现在很多程序在设计的时候一般采用多线程,因为进程在创建的时候需要不断分配内存和I/O等资源会造成系统的不必要的开销。
- 线程是进程中一个基本执行单位,如果设计程序的时候使用多线程来设计,一般一个进程包含一个主线程和若干个子线程;
- 操作系统创建完进程并且分配完资源以后就会首先给这个进程创建一个主线程,并且让主线程参与处理机的调度;
- 对于一些耗时任务(比如:I/O操作等)为了不使这些任务阻塞主线程,往往会开启一个子线程去执行这些任务。
- 子线程和主线程并发,从而可以提高系统的性能。不使用进程实现异步的原因是内存开销太大
协程