Módulo: Mongo::BackgroundThread Privado
- Incluye:
- Registrable
- Incluido en:
- Clúster::Ejecutor periódico, Servidor::Grupo de conexiones::Rellenador, Servidor::Monitor,Servidor::Monitor deinserción, Srv::Monitor
- Definido en:
- lib/mongo/background_thread.rb
Overview
Este módulo forma parte de una API privada. Debe evitar su uso siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.
No inicie ni detenga hilos en segundo plano en finalizadores. Consulta jira.mongodb.org/browse/RUBY-2453 y bugs.ruby-lang.org/issues/16288. Cuando el intérprete sale, primero se detienen los hilos en segundo plano y el siguiente se invocan los finalizadores, y las estructuras de datos internas de MRI están básicamente corruptas en este punto si se están referenciando hilos. Antes de la terminación del intérprete, esto significa que los hilos no pueden detenerse por objetos que salen del alcance, pero lo más probable es que los hilos mantengan referencias a dichos objetos de todos modos si se está realizando algún trabajo, por lo que los objetos no saldrían del alcance en primer lugar.
¡La ejecución!, ¿ejecutando? y ¡detente! los métodos solían ser parte de la API pública en algunas de las clases que ahora incluyen este módulo. Por lo tanto, estos métodos deben considerarse parte de la API pública del controlador por razones de retrocompatibilidad. Sin embargo, se considera deprecated el uso de estos métodos fuera del driver.
Resumen constante
Constantes incluidas desde Loggable
Resumen del método de instancia colapsar
-
#¡corre! ⇒ Objeto
Inicie el hilo de segundo plano.
- #¿corriendo? ⇒ Booleano
-
#¡Alto! ⇒ verdadero | falso
Detén el hilo en segundo plano y espera a que termine durante un tiempo prudente.
Métodos incluidos desde Registrable
#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger
Detalles del método de instancia
#ejecutar! ⇒ Objeto
Inicie el hilo de segundo plano.
Si el hilo ya se está ejecutando, este método no hace nada.
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# Archivo 'lib/mongo/background_thread.rb', línea 46 def ejecutar! si @solicitud_detencion && @thread esperar_detener si @thread.alive? advertencia de registro("Iniciando un nuevo hilo en segundo plano en #{self}, pero el hilo anterior en segundo plano aún está ejecutándose") @thread = nulo end @solicitud_detencion = false end si ¿correr? @thread else ¡empezar! end end |
#en funcionamiento? ⇒ booleano
63 64 65 66 67 68 69 |
# Archivo 'lib/mongo/background_thread.rb', línea 63 def ¿correr? si @thread @thread.alive? else false end end |
#¡stop! ⇒ true | false
Detén el hilo en segundo plano y espera a que termine durante un tiempo prudente.
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 |
# Archivo 'lib/mongo/background_thread.rb', línea 77 def ¡detener! # Si el hilo no se ha iniciado, no hay nada que detener. # # Las clases que incluyan este módulo pueden querer realizar operaciones adicionales # limpieza, lo cual pueden hacer sobreescribiendo este método. return true a menos que @thread # Los hilos en segundo plano generalmente realizan operaciones en un bucle. # Este indicador está destinado a ser verificado en cada iteración de la # bucles de trabajo y el hilo debe dejar de funcionar cuando esta bandera # está establecido. @solicitud_detencion = true # Además de configurar la bandera, una clase en particular puede tener información adicional # maneras de indicarle al hilo de segundo plano que deje de funcionar o # despertarse para comprobar la bandera de parada, por ejemplo, estableciendo un semáforo. # Esto puede lograrse proporcionando el método pre_stop. pre_stop # Ahora hemos solicitado la terminación elegante, y podríamos esperar # para que el hilo salga por sí solo. Una versión futura del # el controlador puede permitir una cierta cantidad de tiempo para que el hilo se cierre. # Por ahora, además utilizamos la maquinaria de Ruby para solicitar el hilo # ser terminados y hacerlo inmediatamente. # # Tenga en cuenta que esto puede provocar que el hilo en segundo plano finalice en #en medio de una operación. @thread.matar esperar_detener end |