class ActiveRecord::ConnectionAdapters::ConnectionPool::Queue
Очередь пула подключений Active Record
Потокобезопасная очередь с честным планированием и дисциплиной LIFO. Предназначена для использования классом ConnectionPool, с которым она совместно использует Monitor.
Общедоступные методы класса
# 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
Общедоступные методы экземпляра
# 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 в очередь. Никогда не блокирует выполнение.
# 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 в конец очереди. Никогда не блокирует выполнение.
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 21
def any_waiting?
synchronize do
@num_waiting > 0
end
end Проверяет, ожидают ли в данный момент какие-либо потоки в очереди.
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 59
def clear
synchronize do
@queue.clear
end
end Удаляет из очереди все элементы.
# 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.
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 29
def num_waiting
synchronize do
@num_waiting
end
end Возвращает количество потоков, ожидающих в данный момент в этой очереди.
# 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 секунд,
# 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.