多线程
线程和进程的定义
线程
线程是进程的基本执行单元,一个进程的所有任务都在线程中执行
进程要想执行任务,必须得有线程,进程至少要有一条线程
程序启动会默认开启一条线程,这条线程被称为主线程或者UI线程
进程
进程是指在系统中正在运行的一个应用程序
每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存空间内
通过“活动监视器”可以查看 Mac 系统中所开启的进程
进程与线程的关系
多线程技术方案
线程生命周期
线程池
饱和策略
阻塞和死锁
阻塞
两个或两个以上的任务在执行过程中,由于一个任务需要等待另一个任务执行结束才可以执行,这种等待现象就是阻塞。
死锁
两个或两个以上的任务在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
死锁产生的条件:
1、互斥:资源不能被共享,同一时间只能有一个任务使用
2、请求与保持条件:任务请求资源的同时,持有原有资源不放
3、非剥夺条件:任务不能强制剥夺另一任务持有的资源
4、循环等待条件:请求链构成环路,存在循环等待。
总结:阻塞一般是没有循环调用的,只需要等待一定时间所有任务就都可以执行完毕;而死锁是有循环调用的情况,任务永远无法执行完毕。
面试题
影响任务执行速度的因素
1、CPU的调度能力
2、线程状态
3、任务复杂度
4、优先级
优先级翻转
1、IO密集型 ,频繁等待
2、CPU密集型 , 很少等待
3、饿死
4、调度
影响优先级的因素
1、用户指定
2、等待的频繁度
3、等待的时长