1.多线程方案介绍
常用多线程方案2.GCD中常用函数
- 同步执行
dispatch_queue_t queue = dispatch_queue_create("serialQueue", DISPATCH_QUEUE_SERIAL);
dispatch_sync(queue, ^{
});
- 异步执行
dispatch_queue_t queue = dispatch_queue_create("concurrentQueue", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
});
3.GCD中常用队列
- 并发队列
可以让多个任务并发(同时)执行(自动开启多个线程同时执行任务),并发功能只有在异步(dispatch_async)函数下才有效 - 串行队列
让任务一个接着一个地执行(一个任务执行完毕后,再执行下一个任务)
4.术语解释
同步:在当前线程中执行任务,不具备开启新线程的能力。
异步:在新的线程中执行任务,具备开启新线程的能力。
并发:多个任务并发(同时)执行。
串行:一个任务执行完毕后,再执行下一个任务。
5.各种队列的执行结果
执行结果注意:使用sync函数往当前串行队列中添加任务,会卡住当前的串行队列(产生死锁)
6.队列组的使用
思考:如何使用GCD实现,异步并发执行任务1,任务2,等任务1任务2执行完毕,回到主线程执行任务3
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_queue_create("concurrentQueue", DISPATCH_QUEUE_CONCURRENT);
dispatch_group_async(group, queue, ^{
NSLog(@"-- 任务1");
});
dispatch_group_async(group, queue, ^{
NSLog(@"-- 任务2");
});
dispatch_group_notify(group, queue, ^{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"-- 任务3");
});
});
参考:MJ老师的视频课程。
网友评论