Есть ли прирост производительности при использовании последовательной очереди диспетчеризации (предполагается высокий или по умолчанию приоритет) над @synchronized
блоками для сериализации доступа к ресурсу. Под усилением я подразумеваю любую разницу в накладных расходах из-за самого механизма синхронизации.
@синхронизированные или последовательные очереди отправки
Ответы (1)
Безусловно. Однако есть и различия в семантике. Блок @synchronized использует рекурсивный, защищенный от исключений мьютекс в боковой таблице. Все эти свойства приводят к некоторым дополнительным накладным расходам. dispatch_queue_t чрезвычайно легкий (особенно при использовании dispatch_*_f, чтобы избежать Block_copy()), но он не рекурсивен, не обрабатывает исключения и не гарантирует конкретный поток.
Лично я думаю, что рекурсивные блокировки — плохая идея, и исключения действительно не должны перехватываться в приложениях Cocoa, поэтому @synchronized имеет очень мало привлекательности.
Будущее редактирование: более новый os_unfair_lock даже значительно снижает накладные расходы, чем любой из них.
person
Catfish_Man
schedule
03.09.2013
Отличный ответ, спасибо!
- person matehat; 03.09.2013