class Concurrent::RubyThreadPoolExecutor

def ns_prune_pool

@!visibility private

try oldest worker if it is idle for enough time, it's returned back at the start
def ns_prune_pool
  now = Concurrent.monotonic_time
  stopped_workers = 0
  while !@ready.empty? && (@pool.size - stopped_workers > @min_length)
    worker, last_message = @ready.first
    if now - last_message > self.idletime
      stopped_workers += 1
      @ready.shift
      worker << :stop
    else break
    end
  end
  @next_gc_time = Concurrent.monotonic_time + @gc_interval
end