Что не так: mu.Lock(); defer mu.Unlock(); for i := 0; i < 1000; i++ { doWork(i) }?

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

Лок удерживается на всё время цикла — 1000 итераций. Другие горутины заблокированы. Если doWork не нуждается в локе — лок слишком широкий. Если нужна защита отдельной операции: for i := 0; i < 1000; i++ { mu.Lock(); doWork(i); mu.Unlock() }. Держать лок минимально необходимое время. Defer удобен, но иногда вреден для производительности.

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

Какие Kafka клиенты для Go существуют?