GCD队列 调度任务

1.队列的2大类型

1> 并发队列:可以同时执行多个任务   * 获取并发队列   并发队列都是全局的:dispatch_get_global_queue(0, 0),不需要管理内存

2> 串行队列:同一时间内,只能执行一个任务   * 获取串行队列    

(1) 跟主线程相关联的队列 dispatch_get_main_queue(),不需要管理内存    

(2) 手动创建队列,dispatch_queue_create("cn.com.queue", NULL),手动管理内存 dispatch_release(queue)

2.队列中任务的执行顺序:先进先出

3.开启任务

1> 开启同步任务 dispatch_sync(queue, ^{

});

2> 开启异步任务 dispatch_async(queue, ^{

});

4.迭代 dispatch_apply(10, queue, ^(size_t i) {

});

5.总结:

1> 队列的类型只决定任务是并发还是串行执行,不影响同步还是异步

2> 函数名称决定同步还是异步,dispatch_async代表异步,dispatch_sync代表同步

#pragma mark 异步串行

- (void)asyncChuanxing {    

// 队列的类型只决定并发还是串行执行任务,并不影响同步还是异步    

// 同步异步取决于函数名        

// 手动创建一个串行队列    

dispatch_queue_t queue = dispatch_queue_create("cn.com.queue", NULL);        

dispatch_async(queue, ^{        

    NSLog(@"执行了一个异步任务-%@", [NSThread currentThread]);    

});        

dispatch_async(queue, ^{        

  NSLog(@"执行了一个异步任务-%@", [NSThread currentThread]);    

});        

dispatch_async(queue, ^{        

  NSLog(@"执行了一个异步任务-%@", [NSThread currentThread]);    

});        

// 释放队列    

  dispatch_release(queue);

}

#pragma mark 异步并发

- (void)asyncBingfa {    

// 异步执行一个任务    

// GCD默认提供了3个全局队列,都是并行队列        

// 获取一个全局队列    

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);        

dispatch_async(queue, ^{        

   NSLog(@"执行了一个异步任务-%@", [NSThread currentThread]);    

});        

dispatch_async(queue, ^{        

  NSLog(@"执行了一个异步任务-%@", [NSThread currentThread]);    

});        

dispatch_async(queue, ^{        

   NSLog(@"执行了一个异步任务-%@", [NSThread currentThread]);    

 });

}

原文地址:https://www.cnblogs.com/wangshengl9263/p/3066429.html