Глубины Indy

       

Сравнение производительности


Как уже упоминалось ранее критические секции легковесны и мало влияют на производительность. Они реализованы в ядре операционной системы.  ОС реализует их используя короткие эффективные ассемблерные команды.

Класс TMREWS более сложен и поэтому больше влияет на производительность. Он должен управлять списком запросов для поддержания состояния блокировок.

Для того чтобы продемонстрировать разницу был создан демонстрационный проект ConcurrencySpeed.dpr. Он проводит три простых замера:

1.      TCriticalSection – Enter и Leave

2.      TMREWS – BeginRead и EndRead

3.      TMREWS – BeginWrite и EndWrite

Он делает это выполняя цикл заданное количество раз. Для примера 100000. В моих тестах я получил следующие результаты.

TCriticalSection: 20

TMREWS (Read Lock): 150

TMREWS (Write Lock): 401

Конечно, результаты зависят от компьютера. Но важна разница, а не абсолютные числа. Я могу видеть что при оптимальных условиях запись TMREWS в 7.5 раз медленне критических секций. А запись медленнее в 20 раз.

Нужно также заметить, что критические секции практически не деградирую при нагрузке, тогда как TMREWS сильно сдает. Тест выполнялся в простом цикле, и не было других запросов на блокировку. В реальной жизни TMREWS будет еще медленнее чем показано здесь.



Содержание раздела