2015-07-31 1 views
1

Почему не использовать SD "серийные очереди" или "synchrolock", SD использовать как это, dispatch_barrier_asyncПочему SDWebImage'downloader использует параллельную очередь для сохранения обратных вызовов?

_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]; 
}); 

ответ

0

TL; DR; Для лучшей производительности.

  1. Операция записи (в том числе удаления) должна быть операцией атома, так что их заворачивает в барьерном блоке
  2. прочитанных операции может быть параллельны, так что их заворачивает в блоке синхронизации, чтобы улучшить мульти- производительность ядра

 Смежные вопросы

  • Нет связанных вопросов^_^