TMultiReadExclusiveWriteSynchronizer быстрее?

Существует ли более быстрый тип TMultiReadExclusiveWriteSynchronizer? Возможно, FastCode?

Начиная с Windows Vista, Microsoft добавила блокировку Slim Reader/Writer . Он работает намного лучше , чем Delphi TMultiReadExclusiveWriteSynchronizer. К сожалению, он существует только в Windows Vista и более поздних версиях, что на самом деле есть у немногих клиентов.

Предположительно, концепции, используемые внутри Slim Reader/Writer lock, могут быть переделаны в собственном коде Delphi -, но кто-нибудь делал это?

У меня возникла ситуация, когда получение и снятие блокировки наTMultiReadExclusiveWriteSynchronizer(даже при отсутствии конфликтов -одного потока )вызывает 100% накладных расходов (время операции удваивается ). я могу работать без блокировки, но тогда мой класс больше не является потокобезопасным -.

Есть ли более быстрый TMultiReadExclusiveWriteSynchronizer?

Примечание.:Если я использую TCriticalSection, я теряю только 2% производительности (, хотя известно, что критические секции работают быстро, когда получение успешно, т.е. спора нет ). Недостатком CS является то, что я теряю возможность «нескольких читателей ».

Измерения

Используя TMultiReadExclusiveWriteSynchronizerзначительное количество времени было потрачено внутри BeginReadиEndRead:

enter image description here

затем я перенес код для использования собственного SlimReaderWriter Lock (, который переписал код, как он не поддерживает рекурсивное получение блокировки )и профилирует результаты:

  • TMultiReadExclusiveWriteSynchronizer:10 698 нс за итерацию
    10 697 772 613 нс для повторения 1 000 000 раз

  • SRWLock:8 802 нс на итерацию
    8 801 678 339 нс для повторения 1 000 000 раз

  • Omni Reader-Writer lock:8 941 нс на итерацию
    8 940 552 487 нс для повторения 1 000 000 раз

Улучшение на 17% при использовании SRWLocks (, также известного как вращающаяся блокировка Omni ).

Теперь я не могу навсегда переключить код на использование Windows Vista SRWLocks , так как некоторые целые предприятия клиентов все еще используют Windows XP.

Замки Slim — это просто аккуратное использование InterlockedCompareExchangeфункций;но более осторожным, чем я могу успешно использовать. Я это далек от того, чтобы просто украсть 140 задействованных машинных инструкций, и сделал это.

Бонусное чтение

22
задан Community 23 May 2017 в 12:26
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: