Проверяет знание методов снижения contention в многопоточных структурах.
Striped locking — это подход, когда один общий ресурс разделяется на множество независимых сегментов, каждый со своим mutex. Это снижает блокировки, позволяя параллелить операции.
Striping состоит из:
большого массива lock’ов (обычно степень двойки),
хеш-функции, выбирающей lock,
изоляции операций между сегментами.
Пример (Golang):
type StripedMap struct {
locks [64]sync.Mutex
data [64]map[string]string
}
func (m *StripedMap) Set(k, v string) {
idx := fnvHash(k) % 64
m.locks[idx].Lock()
defer m.locks[idx].Unlock()
m.data[idx][k] = v
}Преимущества:
уменьшение contention;
масштабирование на много потоков;
эффективная альтернатива sync.Map.
Недостатки:
сложность реализации;
невозможность атомарных операций над всей структурой.
Вывод:
Striped locking хорош для highly concurrent структур, где доступ делится на независимые сегменты.