YYDispatchQueuePool源码笔记
2020/6/24 23:28:00
本文主要是介绍YYDispatchQueuePool源码笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
工具作者在实际开发中,由于开了很多线程去做异步绘制、下载等工作,而且有的线程可能因为资源锁等待的原因,可能导致开更多的线程。当线程过多时,线程占用了过多资源,可能导致主线程受影响,出现卡顿问题
而iOS框架中有最大并发数概念的目测只有NSOpeartionQueue
了,但GCD的代码却无法使用该特性
于是写了该工具,可以方便地创建一个队列池
,类似于线程池的概念,可以避免开辟线程过多的问题
Feature
- 内部使用串行队列来管理线程
- 最多串行队列数不超过32个,所以线程数也不会超过该值
- 提供两种获取队列池的方式
- 全局方法,获取一个队列池
- 自己创建一个队列池管理类,管理串行队列
原理
核心工作就两步骤
- 根据qos、当前CPU情况以及所需的输入创建多个串行队列
- 队列信息存储在
YYDispatchContext
结构体中
- 队列信息存储在
- 结构体中有一个
counter
,每次调用YYDispatchQueueGetForQOS
,counter
加一,同时使用counter % queueCount
作为下标来轮询地到context中获取一个queue
YYDispatchContext
结构体如下
typedef struct { const char *name; void **queues; uint32_t queueCount; int32_t counter; } YYDispatchContext; 复制代码
参考
- YYDispatchQueuePool
- iOS 保持界面流畅的技巧
这篇关于YYDispatchQueuePool源码笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-10-05Swift语法学习--基于协议进行网络请求
- 2022-08-17Apple开发_Swift语言地标注释
- 2022-07-24Swift 初见
- 2022-05-22SwiftUI App 支持多语种 All In One
- 2022-05-10SwiftUI 组件参数简写 All In One
- 2022-04-14SwiftUI 学习笔记
- 2022-02-23Swift 文件夹和文件操作
- 2022-02-17Swift中使用KVO
- 2022-02-08Swift 汇编 String array
- 2022-01-30SwiftUI3.0页面反向传值