工具做者在實際開發中,因爲開了不少線程去作異步繪製、下載等工做,並且有的線程可能由於資源鎖等待的緣由,可能致使開更多的線程。當線程過多時,線程佔用了過多資源,可能致使主線程受影響,出現卡頓問題ios
而iOS框架中有最大併發數概念的目測只有NSOpeartionQueue
了,但GCD的代碼卻沒法使用該特性git
因而寫了該工具,能夠方便地建立一個隊列池
,相似於線程池的概念,能夠避免開闢線程過多的問題github
核心工做就兩步驟bash
YYDispatchContext
結構體中counter
,每次調用YYDispatchQueueGetForQOS
,counter
加一,同時使用counter % queueCount
做爲下標來輪詢地到context中獲取一個queueYYDispatchContext
結構體以下多線程
typedef struct {
const char *name;
void **queues;
uint32_t queueCount;
int32_t counter;
} YYDispatchContext;
複製代碼