Update README.md
This commit is contained in:
parent
90065aac82
commit
5ca48c11fb
1 changed files with 9 additions and 1 deletions
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
Напишите примитив синхронизации, ограничивающий число вызовов на интервале времени.
|
Напишите примитив синхронизации, ограничивающий число вызовов на интервале времени.
|
||||||
|
|
||||||
|
|
||||||
```go
|
```go
|
||||||
func NewLimiter(maxCount int, interval time.Duration) *Limiter
|
func NewLimiter(maxCount int, interval time.Duration) *Limiter
|
||||||
|
|
||||||
|
@ -10,8 +11,15 @@ func (l *Limiter) Acquire(ctx context.Context) error
|
||||||
func (l *Limiter) Stop()
|
func (l *Limiter) Stop()
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Пользователь создаёт `*Limiter`, указывая параметры `maxCount` и `interval`.
|
||||||
|
|
||||||
|
После этого, пользователь вызывает `Acquire` из многих горутин. Некоторые из вызовов `Acquire` могут завершиться сразу,
|
||||||
|
а некоторые могут заблокироваться.
|
||||||
|
|
||||||
`Limiter` должен гарантировать, что на любом интервале времени `interval`, не больше `maxCount` вызовов
|
`Limiter` должен гарантировать, что на любом интервале времени `interval`, не больше `maxCount` вызовов
|
||||||
`Acquire` могут завершиться без ошибки.
|
`Acquire` могут завершиться без ошибки. Например, если `interval` равен `1s`, `maxCount` равен 100,
|
||||||
|
и 200 горутин сделали вызов `Acquire` одновременно, то 100 горутин должны выйти из `Acquire` сразу, а 100 других должны
|
||||||
|
заблокироваться на секунду.
|
||||||
|
|
||||||
Каждый вызов `Acquire` должен либо завершаться успешно, либо завершаться с ошибкой в случае если `ctx` отменили
|
Каждый вызов `Acquire` должен либо завершаться успешно, либо завершаться с ошибкой в случае если `ctx` отменили
|
||||||
во время ожидания. Об отмене `ctx` нужно узнавать по закрытию канала `ctx.Done()`. Если `ctx` отменён,
|
во время ожидания. Об отмене `ctx` нужно узнавать по закрытию канала `ctx.Done()`. Если `ctx` отменён,
|
||||||
|
|
Loading…
Reference in a new issue