shad-go/batcher
2022-02-10 22:06:57 +00:00
..
slow Resolve "upgrage to 1.17" 2022-02-10 22:06:57 +00:00
batcher.go Resolve "upgrage to 1.17" 2022-02-10 22:06:57 +00:00
batcher_race_test.go Resolve "upgrage to 1.17" 2022-02-10 22:06:57 +00:00
batcher_test.go Disable batcher test under racedetector 2021-03-05 14:54:57 +03:00
README.md Update README.md 2021-03-30 18:52:54 +03:00

batcher

*slow.Value - это аналог atomic.Value, с двумя ограничениями:

  • Вызов Load() всегда занимает не меньше 1ms
  • Нельзя делать больше одного вызова Load() в один момент времени.

Реализуйте *Batcher, который оборачивает *slow.Value и ускоряет чтения за счёт батчинга.

Например, если 1000 горутин одновременно сделают вызов (*Batcher).Load(), то можно прочитать значение один раз и раздать всем ожидающим горутинам. Это будет в 1000 раз быстрее, чем вызвать (*slow.Value).Load() напрямую в каждой горутине.

Ваша реализация не должна создавать stale read. То есть, Load() всегда должен возвращать значение не старее последнего Store() на момент начала вызова Load().