Class: SharedBroker::Concurrency::Limiter

Inherits:
Object
  • Object
show all
Defined in:
lib/shared_broker/concurrency/limiter.rb

Instance Method Summary collapse

Constructor Details

#initialize(max_concurrency: nil, backpressure_check: nil, backpressure_backoff: 1.0) ⇒ Limiter

Returns a new instance of Limiter.



8
9
10
11
12
# File 'lib/shared_broker/concurrency/limiter.rb', line 8

def initialize(max_concurrency: nil, backpressure_check: nil, backpressure_backoff: 1.0)
  @backpressure_check = backpressure_check
  @backpressure_backoff = backpressure_backoff
  @semaphore = max_concurrency ? Semaphore.new(max_concurrency) : nil
end

Instance Method Details

#runObject



14
15
16
17
18
19
20
21
# File 'lib/shared_broker/concurrency/limiter.rb', line 14

def run
  wait_while_overloaded
  if @semaphore
    @semaphore.synchronize { yield }
  else
    yield
  end
end