工具作者在实际开发中,由于开了很多线程去做异步绘制、下载等工作,而且有的线程可能因为资源锁等待的原因,可能导致开更多的线程。当线程过多时,线程占用了过多资源,可能导致主线程受影响,出现卡顿问题
而iOS框架中有最大并发数概念的目测只有NSOpeartionQueue
了,但GCD的代码却无法使用该特性
于是写了该工具,可以方便地创建一个队列池
,类似于线程池的概念,可以避免开辟线程过多的问题
核心工作就两步骤
YYDispatchContext
结构体中counter
,每次调用YYDispatchQueueGetForQOS
,counter
加一,同时使用counter % queueCount
作为下标来轮询地到context中获取一个queueYYDispatchContext
结构体如下
typedef struct { const char *name; void **queues; uint32_t queueCount; int32_t counter; } YYDispatchContext; 复制代码