Способы синхронизации данных?

Middle
679 просмотров
AFK Offer AI

В Go есть два подхода к синхронизации:

1. Share memory by communicating (каналы):

ch := make(chan Result)
go func() { ch <- compute() }()
result := <-ch

2. Communicate by sharing memory (мьютексы):

var mu sync.RWMutex
mu.Lock()
sharedData = newValue
mu.Unlock()

Полный список примитивов:

  • sync.Mutex / sync.RWMutex — защита shared state
  • channels — передача данных между горутинами
  • sync.WaitGroup — ожидание группы горутин
  • sync.Once — однократная инициализация
  • sync/atomic — атомарные операции (быстрее мьютекса для простых счётчиков)
  • sync.Map — concurrent-safe map
  • context.Context — отмена, таймауты
  • sync.Pool — пул переиспользуемых объектов
Каналы — для оркестрации, мьютексы — для защиты данных.

Следующий вопрос

Как работает RETURNING в PostgreSQL?