GCD

来源:互联网 发布:磁力解析在线播放软件 编辑:程序博客网 时间:2024/05/17 00:00

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),自己定制的队列。



0 0