AI智能
改变未来

iOS GCD(一)


创建

//全局队列,一个并行的队列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将这些存在于队列的任务取出来放到相应的线程上去执行,而队列的性质决定了在其中的任务在哪种线程上执行

  1. 异步+串行
  2. 异步+并行:开启新的线程,同时执行
  3. 同步+串行:当外部任务和同步执行的内部任务处于一个串行队列时会导致死锁
  4. 同步+并行
  5. 异步+主队列:所有任务都可以先跳过,之后再来“按顺序”执行
  6. 同步+主队列:死锁

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私信关注

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » iOS GCD(一)