Active Record 连接池队列
线程安全、公平、LIFO 队列。旨在与 ConnectionPool
一起使用,后者与它共享一个监视器。
- A
- C
- D
- N
- P
类公共方法
new(lock = Monitor.new) 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 14 def initialize(lock = Monitor.new) @lock = lock @cond = @lock.new_cond @num_waiting = 0 @queue = [] end
实例公共方法
add(element) 链接
将 element
添加到队列中。从不阻塞。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 37 def add(element) synchronize do @queue.push element @cond.signal end end
any_waiting?() 链接
测试当前是否有任何线程正在等待队列。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 22 def any_waiting? synchronize do @num_waiting > 0 end end
clear() 链接
从队列中移除所有元素。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 52 def clear synchronize do @queue.clear end end
delete(element) 链接
如果队列中存在 element
,则将其移除并返回,否则返回 nil
。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 45 def delete(element) synchronize do @queue.delete(element) end end
num_waiting() 链接
返回当前在此队列上等待的线程数。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 30 def num_waiting synchronize do @num_waiting end end
poll(timeout = nil) 链接
移除队列的头部。
如果未提供 timeout
,则在可用元素数严格大于当前等待的线程数时移除并返回队列的头部(即,不要插队)。否则,返回 nil
。
如果提供了 timeout
,则在没有可用元素时阻塞,等待最多 timeout
秒,直到有元素可用。
引发
-
ActiveRecord::ConnectionTimeoutError
如果提供了timeout
且没有元素
在 timeout
秒内可用,
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 72 def poll(timeout = nil) synchronize { internal_poll(timeout) } end