GCD原理

165 阅读1分钟

dispatch_queue

GCD队列的获取通常有以下几种方式:

主队列:dispatch_get_main_queue实际上是一个宏,它返回的是结构体_dispatch_main_q的地址;

管理队列:_dispatch_mgr_q是管理队列,不对外公开,只在GCD内部使用;

全局队列:dispatch_get_global_queue获取GCD内部定义的6个不同的全局队列,dq_width均为UINT32_MAX,全局队列底层是线程池;

自定义队列:dispatch_queue_create设置dq_width为1的默认串行队列;

dispatch_async 异步

用链表实现队列将所有的block放在队列中,需要时依次从队列中取出执行!

dispatch_sync 同步

将任务压入队列中,若队列为空,则唤醒队列来执行任务;若队列不为空,则压入队列等待执行,这期间通过信号量来控制等待!