Spec-Zone.ru › Ruby on Rails 8.1

class ActiveRecord::ConnectionAdapters::ConnectionPool::Queue

Родительский класс:
Object

Очередь пула подключений Active Record

Потокобезопасная очередь с честным планированием и дисциплиной LIFO. Предназначена для использования классом ConnectionPool, с которым она совместно использует Monitor.

Общедоступные методы класса

new (lock = Monitor.new) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 13
def initialize(lock = Monitor.new)
  @lock = lock
  @cond = @lock.new_cond
  @num_waiting = 0
  @queue = []
end

Общедоступные методы экземпляра

add (element) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 36
def add(element)
  synchronize do
    @queue.push element
    @cond.signal
  end
end

Добавляет element в очередь. Никогда не блокирует выполнение.

add_back (element) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 44
def add_back(element)
  synchronize do
    @queue.unshift element
    @cond.signal
  end
end

Добавляет element в конец очереди. Никогда не блокирует выполнение.

any_waiting? () Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 21
def any_waiting?
  synchronize do
    @num_waiting > 0
  end
end

Проверяет, ожидают ли в данный момент какие-либо потоки в очереди.

clear () Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 59
def clear
  synchronize do
    @queue.clear
  end
end

Удаляет из очереди все элементы.

delete (element) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 52
def delete(element)
  synchronize do
    @queue.delete(element)
  end
end

Если element находится в очереди, удаляет и возвращает его, иначе возвращает nil.

num_waiting () Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 29
def num_waiting
  synchronize do
    @num_waiting
  end
end

Возвращает количество потоков, ожидающих в данный момент в этой очереди.

poll (timeout = nil) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 86
def poll(timeout = nil)
  synchronize { internal_poll(timeout) }
end

Удаляет первый элемент очереди.

Если timeout не задан, удаляет и возвращает первый элемент очереди, если количество доступных элементов строго больше количества потоков, ожидающих в данный момент (то есть не позволяет обойти очередь). В противном случае возвращает nil.

Если timeout задан, блокирует выполнение, если доступных элементов нет, ожидая появления элемента не более timeout секунд.

Вызывает исключение:

  • ActiveRecord::ConnectionTimeoutError, если задан timeout и ни один элемент

не становится доступным в течение timeout секунд,

size () Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 66
def size
  synchronize do
    @queue.size
  end
end

Количество элементов в очереди.

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API