工具作者在實際開發中,由於開了很多執行緒去做非同步繪製、下載等工作,而且有的執行緒可能因為資源鎖等待的原因,可能導致開更多的執行緒。當執行緒過多時,執行緒佔用了過多資源,可能導致主執行緒受影響,出現卡頓問題
而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;
複製程式碼