iOS GCD dispatch多线程 同步异步

本文详细解释了主线程队列与全局队列的区别、同步与异步请求的特点、串行与并发队列的工作原理,以及如何使用dispatch API进行任务调度。此外还探讨了线程死锁的问题,并给出了避免死锁的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 1.主线程队列是串行的、全局队列是并发的。
  2. 2.请求分同步和异步,同步会阻塞当前线程,异步不会。
  3. 3.如果队列是串行的,即使是异步,也是一个一个执行,按照添加的顺序执行。
  4. 4.如果队列是异步的,同步请求也会使队列一个一个执行,因为同步请求会阻塞当前线程,如果是异步的会并行执行,可以使用优先级来设置执行的优先顺序。
  5. dispatch_sync 同步请求
  6. //异步请求
  1. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{  
  2.     // 耗时的操作  
  3.     dispatch_async(dispatch_get_main_queue(), ^{  
  4.         // 更新界面  
  5.     });  
  6. });
  7. 5.dispatch_barrier_sync(ConCurrentqueue,{})前面的任务并发完成后才会执行这个任务,而这个任务后面的需这个任务执行完之后才会并发执行。
  8.   dispatch_barrier_async前面队列中的任务并发执行完之后会执行这个任务,这个队列后面的任务需要这个执行完了之后才会触发,和上面的不同是他是异步的不会等待,如果这个任务下面有别的代码不在队列中的会有可能先执行,而同步的不会必须等这个任务执行完之后才会执行。
  9. 6.线程死锁:主要是在串行队列中使用了同步任务,会阻塞当前线程把把任务添加到队尾,等待别的任务执行,而别的任务又需要此任务执行后才能执行就导致死锁,如果当前线程还有别的任务需要小心使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值