shad-go/batcher/README.md
Fedor Korotkiy ff40c140ba Fix typos
2020-02-15 02:26:44 +03:00

1.1 KiB
Raw Blame History

batcher

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

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

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

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

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