简单了解下多任务相关
多任务
不管是单核还是多核CPU,一单任务数量超过核数,OS都会把每个任务轮流调度到每个核心上,OS实现多线程和多进程往往都是通过时间片的形式执行的,即:每个任务(进程/线程)轮流执行,因为时间片切分的很小,以至于我们感觉多个任务在同时执行。
实现多任务方式:多进程模式,多线程模式,多进程+多线程模式
进程是资源分配的最小单位,线程是CPU调度的最小单位,每个进程至少含有一个线程,如何调度进程和线程,完全由操作系统决定,程序不能自己决定什么时候执行,执行多久时间
多线程
一个进程内可以有多个线程(至少一个线程),多个线程共享进程的所有变量,同时对全局变量进行访问和改写容易出现混乱,所以需要用锁进行线程的同步控制。
多线程的目的:最大限度的利用CPU资源。
处理器的个数决定了同一时刻同时运行的最大线程数,如单核CPU某一时刻只能有一个线程在执行(微观串行),双核的CPU可以最多同时运行两个线程,可以做到微观并行。
多进程:
一个进程内有一个默认线程,开多个进程处理不同的任务,每个进程有自己独立的内存空间,不共享对象,同步简单,但是开销较大。
简单对比下:
对比维度 | 多进程 | 多线程 | 总结 |
数据共享,同步 |
数据共享复杂,需要IPC(进程间通信) 数据是隔离的,同步简单 |
共享进程数据,共享简单 同步复杂 |
各有优劣势, 视应用场景而定 |
内存,CPU |
占用内存多,切换复杂, CPU利用率低 |
占用内存少,切换简单, CPU利用率高 |
线程占优 |
创建销毁,切换 | 创建销毁,切换复杂,速度慢 | 创建销毁,切换简单,速度快 | 线程占优 |
编程调试 | 编程简单,调试简单 | 编程复杂,调试复杂 | 进程占优 |
可靠性 | 进程间不会互相影响 | 一个线程挂掉,会导致整个进程挂掉 | 进程占优 |
分布式 |
是应于多核,多机分布式, 一台机器不够,扩展较简单 |
适应于多核分布式 | 进程占优 |