Active Record 连接池队列
线程安全、公平、后进先出队列。旨在与 ConnectionPool
一起使用,它们共享一个 Monitor。
方法
- A
- C
- D
- N
- P
类公共方法
new(lock = Monitor.new) 链接
来源: 显示 | 在 GitHub 上
# 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) 链接
将 element
添加到队列中。从不阻塞。
来源: 显示 | 在 GitHub 上
# 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
any_waiting?() 链接
测试是否有任何线程正在等待队列。
来源: 显示 | 在 GitHub 上
# 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() 链接
从队列中删除所有元素。
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 51 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 44 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 29 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 71 def poll(timeout = nil) synchronize { internal_poll(timeout) } end