SD为什么不使用“串行队列”或“synchrolock”,SD这样使用,dispatch_barrier_async

   _barrierQueue=dispatch_queue_create("com.hackemist.SDWebImageDownloaderBarrierQueue", DISPATCH_QUEUE_CONCURRENT);
dispatch_barrier_sync(self.barrierQueue, ^{
      ....
});
dispatch_barrier_async(sself.barrierQueue, ^{
   [sself.URLCallbacks removeObjectForKey:url];
});
dispatch_sync(sself.barrierQueue, ^{
   callbacksForURL = [sself.URLCallbacks[url] copy];
});

最佳答案

TL; DR;为了更好的性能。

  • 写操作(包括删除操作)必须是原子操作,因此它们被包裹在屏障块
  • 读取操作可以是并行的,因此将它们包装在同步块中,以提高多核性能
  • 10-07 23:48