24 серпня 2017 року разом із випуском Go 1.9 у пакет sync було додано новий тип Map, який забезпечує безпечний доступ до даних при одночасному виконанні.
Реліз Go 1.9, представлений 24 серпня 2017 року, додав тип sync.Map до стандартної бібліотеки. Він призначений для безпечного паралельного доступу до даних без необхідності використання окремих м'ютексів (mutex) для захисту звичайної карти (map). Це рішення ефективно працює в умовах, коли набори ключів є стабільними або коли різні горутини працюють з різними підмножинами ключів.
Рекомендації щодо впровадження:
- Використовуйте
sync.Mapлише у випадках, коли ви маєте докази того, що звичайна карта зsync.RWMutexстворює вузьке місце через конкуренцію. - Для загальних випадків продовжуйте використовувати стандартну
mapз відповідними примітивами синхронізації. - Проведіть тестування продуктивності вашого застосунку при переході на
sync.Map, щоб переконатися в доцільності заміни.
Масштабування конкурентних систем через sync.Map
Впровадження sync.Map у Go 1.9 є важливим рішенням для систем з високою конкурентністю, де часте зчитування даних переважає над записом. Це дозволяє уникнути вузьких місць, пов'язаних із блокуваннями, та підвищити масштабованість сервісів без необхідності переписувати логіку синхронізації з нуля.
Практичний крок: Якщо ви стикаєтеся з проблемами продуктивності у висококонкурентних Go-застосунках, зверніться до Softline для проведення тестування продуктивності та отримання рекомендацій щодо архітектурної оптимізації вашого коду.
Використані джерела
- go.dev (go.dev)