GCD的基本使用

1异步函数+并发队列(会开多条线程,任务是并发执行的

 1、1创建并发队列

dispatch_queue_t queue = dispatch_queue_create("download", DISPATCH_QUEUE_CONCURRENT);

1、2执行异步函数

dispatch_async(queue, ^{

NSLog(@"download 1---%@",[NSThread currentThread]);

});

2异步函数+串行队列(会开一条线程,任务是按顺序执行的)

2、1创建串行队列

dispatch_queue_t queue = dispatch_queue_create("download", DISPATCH_QUEUE_SERIAL);

2、2执行异步函数

dispatch_async(queue, ^{

NSLog(@"download 1---%@",[NSThread currentThread]);

});

3、同步函数+并发队列(不会开线程,任务按顺序执行)

3、1创建并发队列

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

3、2执行同步任务

dispatch_sync(queue, ^{

NSLog(@"download 1---%@",[NSThread currentThread]);

});

4、异步函数+并发队列(不会开线程,任务按顺序执行)

4-1创建并发队列

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

4-2执行异步任务

dispatch_async(queue, ^{

NSLog(@"download 1---%@",[NSThread currentThread]);

});

5、同步函数+主队列(不会开线线程,会死锁)

5-1获得主队列

dispatch_queue_t queue =  dispatch_get_main_queue();

5-2执行同步函数

ispatch_sync(queue, ^{

NSLog(@"download 1---%@",[NSThread currentThread]);

});

6、异步函数+主队列(不会开线程,任务按顺序执行)

6-1获得主队列

dispatch_queue_t queue =  dispatch_get_main_queue();

6-2执行异步函数

dispatch_async(queue, ^{

NSLog(@"download 1---%@",[NSThread currentThread]);

});

7、同步函数+全局队列(不会开线程,任务是按顺序执行的)

7-1、获取全局队列

//获得全局并发队列,默认存在,特殊的并发队列

//第一个参数:队列的优先级 DISPATCH_QUEUE_PRIORITY_DEFAULT == 0

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

7-2、执行同步任务

dispatch_sync(queue, ^{

NSLog(@"download 1---%@",[NSThread currentThread]);

});

8、异步函数+全局队列(会开线程,任务是并发执行的)

8-1、获得全局队列

//获得全局并发队列,默认存在,特殊的并发队列

//第一个参数:队列的优先级 DISPATCH_QUEUE_PRIORITY_DEFAULT == 0

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

8-2、执行异步函数

dispatch_async(queue, ^{

NSLog(@"download 1---%@",[NSThread currentThread]);

});

总结:会不会开线程是根据执行的是什么函数,如果是异步函数会开线程(主队列除外)如果是同步函数不会开线程

你可能感兴趣的:(GCD的基本使用)