shad-go/batcher
2020-02-16 16:25:06 +03:00
..
slow Add batcher task 2020-02-15 02:04:08 +03:00
batcher.go Add batcher task 2020-02-15 02:04:08 +03:00
batcher_test.go Check for goroutine leaks 2020-02-16 16:25:06 +03:00
README.md Fix typos 2020-02-15 02:26:44 +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().