iOS 底层原理(22) -多线程概念

125 阅读2分钟

多线程

线程和进程的定义

线程

线程是进程的基本执行单元,一个进程的所有任务都在线程中执行

进程要想执行任务,必须得有线程,进程至少要有一条线程

程序启动会默认开启一条线程,这条线程被称为主线程或者UI线程

进程

进程是指在系统中正在运行的一个应用程序

每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存空间内

通过“活动监视器”可以查看 Mac 系统中所开启的进程

进程与线程的关系

image.png

多线程技术方案

image.png

线程生命周期

Screen Shot 2022-04-27 at 22.45.35.png

线程池

image.png

饱和策略

image.png

阻塞和死锁

阻塞

两个或两个以上的任务在执行过程中,由于一个任务需要等待另一个任务执行结束才可以执行,这种等待现象就是阻塞。

死锁

两个或两个以上的任务在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

死锁产生的条件:

1、互斥:资源不能被共享,同一时间只能有一个任务使用

2、请求与保持条件:任务请求资源的同时,持有原有资源不放

3、非剥夺条件:任务不能强制剥夺另一任务持有的资源

4、循环等待条件:请求链构成环路,存在循环等待。

总结:阻塞一般是没有循环调用的,只需要等待一定时间所有任务就都可以执行完毕;而死锁是有循环调用的情况,任务永远无法执行完毕。

面试题

影响任务执行速度的因素

1、CPU的调度能力

2、线程状态

3、任务复杂度

4、优先级

优先级翻转

1、IO密集型 ,频繁等待

2、CPU密集型 , 很少等待

3、饿死

4、调度

影响优先级的因素

1、用户指定

2、等待的频繁度

3、等待的时长