.. | ||
slow | ||
batcher.go | ||
batcher_test.go | ||
README.md |
batcher
*slow.Value
- это аналог atomic.Value
, с двумя ограничениями:
- Вызов
Load()
всегда занимает не меньше 1ms - Нельзя делать больше одного вызова
Load()
в один момент времени.
Реализуйте *Batcher
, который оборачивает *slow.Value
и ускоряет чтения за счёт батчинга.
Например, если 1000 горутин одновременно сделают вызов (*Batcher).Load()
, то можно прочитать
значение один раз и раздать всем ожидающим горутинам. Это будет в 1000 раз быстрее,
чем вызывать (*slow.Value).Load()
напрямую в каждой горутине.
Ваша реализация не должна создавать stale read. Тоесть, Load()
всегда должен возвращать значение
последнего Store()
на момент начала вызова Load()
.