目录
- 一、多进程优缺点
- 二、多线程优缺点
- 三、使用多执行流的场景
在多任务处理中,我们既可以使用多进程,也可以使用多线程。但多进程和多线程并不是随意选择的,因为它们应对的场景不同,优缺点也不同。
一、多进程优缺点
多进程就是在程序中创建多个子进程来执行不同的分支。
多进程的优点:
- 多进程的稳定性强、健壮性强。(如果子进程崩溃,不会影响父进程)
- 某些系统调用接口针对的是进程。
- 任务处理的效率高。
多进程的缺点:
- 多进程间调度成本大。因为每个进程都有独立的虚拟内存和页表,调度时需要加载页表等信息。
- 进程创建和销毁成本大。创建进程时除了pcb,还需要创建虚拟空间和页表等信息,因此耗费比较大。
二、多线程优缺点
多线程是在进程中划分多个执行流,每个执行流是一个线程。
多线程优点:
- 线程间通信很灵活。(进程间通信方式线程也可以使用,同时线程间通信方式还有全局变量和函数传参)
- 同一进程的线程间的调度成本很低,因为共享的是同一个虚拟内存和页表,调度时不需要重新加载页表等资源。
- 线程的创建和销毁成本低。创建线程只需要创建pcb,并且大部分数据共享。
- 任务处理效率高。
多线程缺点:
- 稳定性不如多进程。一个线程崩溃后,可能会影响整个程序。
- 同一进程的线程共用同一个虚拟内存。这样每个线程都不能随心所欲地使用空间了。
三、使用多执行流的场景
介绍两种适合使用多执行流的场景:CPU密集型程序、IO密集型程序。
CPU密集型程序:
(1)CPU密集是指程序对CPU的依赖程度很高,这说明程序中大部分都是数据处理,因为CPU就是用来运算的。
(2)现在的计算机基本都是多核,所以如果将一个CPU密集型程序分为多个执行流,让每个核心执行一条执行流,那么将会大大提升数据的运算速率。
(3)但执行流并不是越多越好,因为程序是切换调度运行的,太多的执行流意味着要经常进行调度,成本就太高了,因此要找一个合适的执行流数量。
IO密集型程序:
(1)IO密集型程序是指程序对IO设备的依赖度很高,具有非常多的IO操作。
(2)IO操作包含两部分:IO等待,数据拷贝。IO等待就是程序要等待IO设备资源空闲才可以使用,数据拷贝就是IO数据的操作。
(3)CPU的处理速度很快,但IO数据的处理是从硬盘读取或写入的,速度上远远比不过CPU处理的速度,因此IO操作中耗费时间最多的步骤其实是等待IO设备。
(4)如果只有一个执行流,假如有两个IO请求,一个A程序,一个B程序,这两个程序要使用同一个IO设备,那么就需要排队。
(5)排队时首先进行A程序的两个阶段,然后进行B程序的两个阶段。如图:
(6)如果有两个执行流,那么两个程序就可以同时进行IO等待,这样就能减少总体的运行时间。