Striping блокировок — это техника для работы с параллелизмом, которая использует несколько блокировок для защиты разных частей одной структуры данных, вместо того чтобы использовать одну блокировку для всей структуры.
Вместо того чтобы защищать всю структуру данных одной блокировкой, striping блокировок разделяет структуру на меньшие сегменты, каждый со своей отдельной блокировкой. Это позволяет нескольким тредам одновременно обращаться к разным сегментам без взаимной блокировки.
Класс ConcurrentHashMap в Java хорошо демонстрирует striping блокировок:
Striping блокировок дает значительное улучшение производительности по сравнению с традиционными синхронизированными подходами:
В синхронизированном HashMap весь map защищен одной блокировкой, что означает, что в один момент времени его может использовать только один тред. Striping блокировок избавляет от этого узкого места, позволяя одновременно обращаться к разным сегментам.
Эта техника особенно ценна в высококонкурентном окружении, где несколько тредов часто обращаются к одной и той же структуре данных.
Lock striping позволяет нескольким потокам одновременно получать доступ к разным сегментам структуры данных, потому что каждый сегмент защищен собственной независимой блокировкой.
Новый — ещё не проверен сообществом
Вы