模块:Mongo::BackgroundThread Private
- 包括:
- Loggable
- 包含在:
- Cluster::PeriodicExecutor 、 Server::ConnectionPool::Populator 、 Server::Monitor 、 Server::PushMonitor 、 Srv::Monitor
- 定义于:
- 构建/ruby-driver-v2.19/lib/ mongo /background_thread.rb
Overview
该模块是私有 API 的一部分。 您应尽可能避免使用此模块,因为它将来可能会被删除或更改。
注意:
不要在终结器中启动或停止后台线程。 请参阅jira.mongodb.org/browse/RUBY- 2453 和bugs.Ruby-lang.org/issues/ 16288 。 当解释器退出时,后台线程首先停止,然后调用终结器,如果正在引用线程,则 MRI 的内部数据结构此时基本上已损坏。 在解释器关闭之前,这意味着线程不能被超出作用域的对象停止,但如果正在执行工作,线程很可能无论如何都会保留对所述对象的引用,因此对象一开始就不会Go作用域。
运行!,运行?停止! 方法曾经是某些类中公共API的一部分,现在包含此模块。 因此,出于向后兼容性的考虑,必须将这些方法视为驱动程序公共API的一部分。 但是,在驾驶员外部使用这些方法已被弃用。
常量摘要
Loggable中包含的常量
实例方法摘要折叠
-
# 运行! ⇒ 对象
启动后台线程。
- # running? ⇒ 布尔
-
# stop! ⇒ true | false
停止背景线程并等待合理的时间终止。
Loggable中包含的方法
#log_debug 、 #log_error 、 #log_ Fatal 、 #log_info 、 #log_warn 、 #logger
实例方法详细信息
# 运行! ⇒对象
启动后台线程。
如果线程已在运行,则此方法不执行任何操作。
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/background_thread.rb', 第46行 def 运行! if @stop_requested && @thread wait_for_stop if @thread.alive? log_warn(" 在 #{ self } 中启动新的后台线程 ,但上一个后台线程仍在运行 ") @thread = nil end @stop_requested = false end if 运行? @thread else 开始! end end |
# 运行? ⇒布尔
63 64 65 66 67 68 69 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/background_thread.rb', 第63行 def 运行? if @thread @thread.alive? else false end end |
# stop! ⇒ true | false
停止背景线程并等待合理的时间终止。
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/background_thread.rb', 第77行 def 停止! # 如果线程未启动,则无需停止。 # # 包含此模块的类可能想要执行额外的 # 清理,他们可以通过覆盖此方法来执行清理。 return true 除非 @thread # 后台线程通常在循环中执行操作。 # 此标志应在每次迭代时进行检查 # 工作循环,当此标志时,线程应停止工作 # 已设置。 @stop_requested = true # 除了设置标志之外,特定类还可能有额外的 # 向背景线程发出信号以停止工作或 # 唤醒以检查停止标志,示例设置信号量。 # 这可以通过提供 pre_stop 方法来完成。 pre_stop # 现在我们已请求优雅终止,可以等待 # 以便线程自行退出。 未来版本的 # 驱动程序可能会允许线程在一定时间内退出。 # 目前,我们还使用Ruby机制来请求线程 # 被终止,并立即终止。 # # 请注意,这可能会导致背景线程终止 # 操作的中间。 @thread.kill wait_for_stop end |