GCD的“艺术”可归结为选择正确的队列调度函数来提交任务
顺序队列: 同一时间只执行一件任务,每件任务只有在先前的任务完成后才开始。同时,你并不知道一个任务完成到另一个任务开始之间的间隔时间
例:dispatch_queue_t queue = dispatch_queue_create ( "com.dispatch.serial" ,DISPATCH_QUEUE_SERIAL ); //生成一个串行队列,队列中的block按照先进先出(FIFO)的顺序去执行,实际上为单线程执行。第一个参数是队列的名称,在调试程序时会非常有用,所有尽量不要重名了。
dispatch_queue_t queue = dispatch_get_main_queue(); //获得主线程的dispatch队列,实际是一个串行队列。注意无法控制系统自定义线程队列的执行继续或中断
并发队列: 并发队列中的任务可以保证按进入队列的顺序被执行…仅此而已!任务可能以任意顺序完成而且你不知道何时下一个任务会开始,或是任一时刻有多少任务在运行, 这完全取决于GCD
例:dispatch_queue_t queue = dispatch_queue_create ( "com.dispatch.concurrent" , DISPATCH_QUEUE_CONCURRENT ); //生成一个并发执行队列,block被分发到多个线程去执行
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //获得程序进程缺省产生的并发队列,可设定优先级来选择四个优先级队列。由于是系统默认生成的,所以无法调用dispatch_resume()和dispatch_suspend()来控制执行继续或中断。以下是四个优先级:DISPATCH_QUEUE_PRIORITY_HIGH,DISPATCH_QUEUE_PRIORITY_DEFAULT , DISPATCH_QUEUE_PRIORITY_LOW, DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN
队列类型可分为5种:主队列(main queue),四种通用调度队列(global queue),自己定制的队列。