多线程GCD相关知识

核心概念: 1任务--执行什么操作

               2队列--用来存放任务

同步函数: dispatch_sync( dispatch_queue_t  queue,dispatch_block_t  block);

异步函数: dispatch_async( dispatch_queue_t  queue,dispatch_block_t  block);

并发队列: 只能在异步方式下才有效

串行队列: 让任务一个接一个执行

同步函数不能开启新线程,在当前线程中执行

异步函数可以开启新线程,在新线程中执行

并发队列多个任务同时执行

串行队列一个任务完成后再执行下个任务

创建一个串行队列: dispatch_queue_t   queue=dispatch_queue_create("名字",null);

释放创建的队列: dispatch_release( queue );//MRC下需要释放

GCD默认提供了一个全局的并发队列,供整个程序使用,不需要手动创建

队列一://最高优先级的并发队列 ( 由第一个参数决定,下同 )

dispatch_queue_t queue1=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);

队列二://默认优先级的队列

dispatch_queue_t queue2=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

队列三://低优先级的队列

dispatch_queue_t queue3=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);

队列四://后台执行的队列

dispatch_queue_t queue4=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);

主队列: 主队列中的任务都会放在主线程中执行,

获得主队列: dispatch_queue_t queue5=dispatch_get_main_queue();

异步函数下并发队列会开多条线程

异步函数下串行队列只会开一条线程

同步函数下都不会开线程

如果把任务放在主队列中执行,那么不论是同步还是异步都不会开新线程

static dispatch_once_t once;//这个可以实现一次性代码,整个程序运行中只执行一次

dispatch_once(&once, ^{

// 只执行一次的代码放在这

});

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

NSLog(@"98989898");

});//三秒后在主线程执行打印

你可能感兴趣的:(多线程GCD相关知识)