shad-go/batcher/README.md

15 lines
1.1 KiB
Markdown
Raw Normal View History

2020-02-14 23:01:42 +00:00
# batcher
`*slow.Value` - это аналог `atomic.Value`, с двумя ограничениями:
- Вызов `Load()` всегда занимает не меньше 1ms
- Нельзя делать больше одного вызова `Load()` в один момент времени.
Реализуйте `*Batcher`, который оборачивает `*slow.Value` и ускоряет чтения за счёт батчинга.
Например, если 1000 горутин одновременно сделают вызов `(*Batcher).Load()`, то можно прочитать
значение один раз и раздать всем ожидающим горутинам. Это будет в 1000 раз быстрее,
2020-02-14 23:26:44 +00:00
чем вызвать `(*slow.Value).Load()` напрямую в каждой горутине.
2020-02-14 23:01:42 +00:00
2021-03-28 11:30:53 +00:00
Ваша реализация не должна создавать _stale read_. То есть, `Load()` всегда должен возвращать значение
2020-02-14 23:26:44 +00:00
не старее последнего `Store()` на момент начала вызова `Load()`.