Grand Central Dispatch简称GCD
1.任务,即操作分俩种 : 同步执行和异步执行(在GCD中就是一个block)
同步(sync)和异步(async)的主要区别在于会不会阻碍当前线程,知道block结束
如果是同步(sync)操作,会阻碍当前线程并等待block结束,然后才会继续往下执行,如果是异步(async)操作,当先线程会直接往下执行,它不会阻碍当前线程
2.队列:用于存放任务,俩种:串行队列和并行队列
串行队列是根据队列定义FIFO一个一个执行,并行队列则同时进行,注意:如果系统资源不足,任务却很多,并行也不会执行
3.主队列是一个特殊的串行队列,一般用于刷新UI
dispatch_queue_t queue = ispatch_get_main_queue();
4.自己创建队列
自己可以创建 串行队列, 也可以创建 并行队列。看下面的代码(代码已更新),它有两个参数,第一个上面已经说了,第二个才是最重要的。第二个参数用来表示创建的队列是串行的还是并行的,传入 DISPATCH_QUEUE_SERIAL 或 NULL 表示创建串行队列。传入 DISPATCH_QUEUE_CONCURRENT 表示创建并行队。。
//OBJECTIVE-C
//串行队列
dispatch_queue_t queue = dispatch_queue_create(“tk.bourne.testQueue”, NULL);
dispatch_queue_t queue = dispatch_queue_create(“tk.bourne.testQueue”, DISPATCH_QUEUE_SERIAL);
//并行队列
dispatch_queue_t queue = dispatch_queue_create(“tk.bourne.testQueue”, DISPATCH_QUEUE_COURRENT)
5.
下面的是系统的一个并发队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
6.组
//1.创建队列组
dispatch_group_t group = dispatch_group_create();
//2.创建队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//3.多次使用队列组的方法执行任务, 只有异步方法
//3.1.执行3次循环
dispatch_group_async(group, queue, ^{
for (NSInteger i = 0; i < 3; i++) {
NSLog(@”group-01 - %@”, [NSThread currentThread]);
}
});
//3.2.主队列执行8次循环
dispatch_group_async(group, dispatch_get_main_queue(), ^{
for (NSInteger i = 0; i < 8; i++) {
NSLog(@”group-02 - %@”, [NSThread currentThread]);
}
});
//3.3.执行5次循环
dispatch_group_async(group, queue, ^{
for (NSInteger i = 0; i < 5; i++) {
NSLog(@”group-03 - %@”, [NSThread currentThread]);
}
});
//4.都完成后会自动通知
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@”完成 - %@”, [NSThread currentThread]);
});