14 lines
1.1 KiB
Markdown
14 lines
1.1 KiB
Markdown
# batcher
|
||
|
||
`*slow.Value` - это аналог `atomic.Value`, с двумя ограничениями:
|
||
- Вызов `Load()` всегда занимает не меньше 1ms
|
||
- Нельзя делать больше одного вызова `Load()` в один момент времени.
|
||
|
||
Реализуйте `*Batcher`, который оборачивает `*slow.Value` и ускоряет чтения за счёт батчинга.
|
||
|
||
Например, если 1000 горутин одновременно сделают вызов `(*Batcher).Load()`, то можно прочитать
|
||
значение один раз и раздать всем ожидающим горутинам. Это будет в 1000 раз быстрее,
|
||
чем вызвать `(*slow.Value).Load()` напрямую в каждой горутине.
|
||
|
||
Ваша реализация не должна создавать _stale read_. Тоесть, `Load()` всегда должен возвращать значение
|
||
не старее последнего `Store()` на момент начала вызова `Load()`.
|