创建
//全局队列,一个并行的队列dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)//主队列,主线程中的唯一队列,一个串行队列dispatch_get_main_queue()//自定义队列//串行队列dispatch_queue_create(\"com.topsky.serialqueue\", DISPATCH_QUEUE_SERIAL)//并行队列dispatch_queue_create(\"com.topsky.concurrentqueue\", DISPATCH_QUEUE_CONCURRENT)//同步异步线程创建dispatch_async(queue, ^{NSLog(@\"异步任务\");});dispatch_sync(queue, ^{NSLog(@\"同步任务\");});
队列和线程的区别
简单来说,队列就是用来存放任务的“暂存区”,而线程是执行任务的路径,GCD将这些存在于队列的任务取出来放到相应的线程上去执行,而队列的性质决定了在其中的任务在哪种线程上执行
- 异步+串行
- 异步+并行:开启新的线程,同时执行
- 同步+串行:当外部任务和同步执行的内部任务处于一个串行队列时会导致死锁
- 同步+并行
- 异步+主队列:所有任务都可以先跳过,之后再来“按顺序”执行
- 同步+主队列:死锁
GCD死锁
事件A在等待事件B执行完成,事件B在等待事件A执行完成,sync函数永远不能返回,最终,就是GCD死锁
- (void)viewDidLoad {[super viewDidLoad];NSLog(@\"begin\");//GCD同步函数dispatch_sync(dispatch_get_main_queue(), ^{NSLog(@\"Task 1---%@\", [NSThread currentThread]);});NSLog(@\"end\");}//输出begin
声明:本文非原创,仅仅整理一些开发技能知识文章,以作存档学习用
参考:
[iOS 多线程] iOS多线程-GCD
- 点赞1
- 收藏
- 分享
- 文章举报
春风酿酒发布了12 篇原创文章 · 获赞 12 · 访问量 209私信关注