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的默认串行队列;
苹果提供的GCD底层调用图:
dispatch_async
- 用链表实现队列将所有的block放在队列中,需要时依次从队列中取出执行!
dispatch_sync
- 将任务压入队列中,若队列为空,则唤醒队列来执行任务;若队列不为空,则压入队列等待执行,这期间通过信号量来控制等待!