zoukankan      html  css  js  c++  java
  • iOS的GCD精要

    使用线程的方式,可以通过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];
      });
    }
  • 相关阅读:
    web服务器-Apache
    nginx优化
    nginx下载限速
    nginx-URL重写
    HDU 5358 First One 求和(序列求和,优化)
    HDU 5360 Hiking 登山 (优先队列,排序)
    HDU 5353 Average 糖果分配(模拟,图)
    UVALive 4128 Steam Roller 蒸汽式压路机(最短路,变形) WA中。。。。。
    HDU 5348 MZL's endless loop 给边定向(欧拉回路,最大流)
    HDU 5344 MZL's xor (水题)
  • 原文地址:https://www.cnblogs.com/lwzz/p/3067731.html
Copyright © 2011-2022 走看看