@синхронизированные или последовательные очереди отправки

Есть ли прирост производительности при использовании последовательной очереди диспетчеризации (предполагается высокий или по умолчанию приоритет) над @synchronized блоками для сериализации доступа к ресурсу. Под усилением я подразумеваю любую разницу в накладных расходах из-за самого механизма синхронизации.


person matehat    schedule 03.09.2013    source источник


Ответы (1)


Безусловно. Однако есть и различия в семантике. Блок @synchronized использует рекурсивный, защищенный от исключений мьютекс в боковой таблице. Все эти свойства приводят к некоторым дополнительным накладным расходам. dispatch_queue_t чрезвычайно легкий (особенно при использовании dispatch_*_f, чтобы избежать Block_copy()), но он не рекурсивен, не обрабатывает исключения и не гарантирует конкретный поток.

Лично я думаю, что рекурсивные блокировки — плохая идея, и исключения действительно не должны перехватываться в приложениях Cocoa, поэтому @synchronized имеет очень мало привлекательности.

Будущее редактирование: более новый os_unfair_lock даже значительно снижает накладные расходы, чем любой из них.

person Catfish_Man    schedule 03.09.2013
comment
Отличный ответ, спасибо! - person matehat; 03.09.2013