随笔 - 75  文章 - 0  评论 - 190  阅读 - 29万 

使用线程的方式,可以通过GCD。

并发的后台任务,可以通过创建并发列队来实现。全局列队就是一个并发列队

并发列队,执行的时候是并发的,GCD实现的时候会开启多线程。

串行列队,任务可以异步的放入队列,执行的时候会按照FIFO的顺序执行。因为是串行的,同一个串行列队不会有并发带来的各种问题。如果是主列队则不会创建新线程。

dispatch_async 时会拷贝 block,当拷贝 block 的时间大于执行 block 的时间时,dispatch_async 的速度会比 dispatch_sync 速度更慢。所以实际情况应根据 block 所执行任务的繁重程度来决定使用 dispatch_async 还是 dispatch_sync。

多个获取方法可以并发执行,获取方法与设置方法不能并发执行。据此可以使用全局并发队列和 GCD 的 dispatch_barrier_async 来实现。

dispatch_barrier_async函数,在该方法执行之前,之后的block是没有添加到队列中去的。dispatch_barrier_async会等待concurrent上的任务全部结束之后,再将指定的任务追加到队列中,然后dispatch_barrier_async函数追加的处理执行完后,concurrent队列开始并行执行。

 

复制代码
- (id)objectAtIndex:(NSUInteger)index {
  __block id obj;
  dispatch_sync(self.concurrentQueue, ^{
    obj = [self.array objectAtIndex:index];
  }); 
  return obj;
}
- (void)insertObject:(id)obj atIndex:(NSUInteger)index { 
  dispatch_barrier_async(self.concurrentQueue, ^{
    [self.array insertObject:obj atIndex:index];
  });
}
复制代码

 

posted on   一路转圈的雪人  阅读(189)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示