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/subproceso_de_fondo.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.

Nota:

No inicie ni detenga hilos en segundo plano en los finalizadores.Consulte jira.mongodb.org/browse/RUBY-2453 y bugs.ruby-lang.org/issues/.16288 Al finalizar el intérprete, los hilos en segundo plano se detienen primero y luego se invocan los finalizadores. En este punto, las estructuras de datos internas de MRI están prácticamente corruptas si se hace referencia a los hilos. Antes del cierre del intérprete, esto significa que los hilos no pueden detenerse si los objetos salen del ámbito, pero lo más probable es que los hilos contengan referencias a dichos objetos si se está realizando trabajo, por lo que los objetos no quedarían fuera del ámbito en primer lugar.

Los métodos ¡Corre!, ¿Corriendo? y ¡Alto! solían formar 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 motivos de compatibilidad con versiones anteriores. Sin embargo, su uso fuera del controlador está obsoleto.

Resumen constante

Constantes incluidas desde Loggable

Registrable::PREFIX

Colapso del resumen del método de instancia

Métodos incluidos en Loggable

#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger

Detalles del método de instancia

#¡corre!Objeto

Iniciar el hilo de fondo.

Si el hilo ya está ejecutándose, 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 ¡correr!
  Si @stop_requested && @hilo
    esperar_a_parar
    Si @hilo.alive?
      advertencia de registro("Iniciandoun nuevo hilo en segundo plano en #{self}, pero el hilo en segundo plano anterior todavía estáejecutándose")
      @hilo = nulo
    end
    @stop_requested = false
  end
  Si ¿correr?
    @hilo
  else
    ¡comenzar!
  end
end

#¿corriendo?Booleano

Devuelve:

  • (Booleano)


63
64
65
66
67
68
69
# Archivo 'lib/mongo/background_thread.rb', línea 63

def ¿correr?
  Si @hilo
    @hilo.alive?
  else
    false
  end
end

#¡Alto!verdadero | falso

Detenga el hilo en segundo plano y espere a que finalice durante un período de tiempo razonable.

Devuelve:

  • (verdadero | falso)

    Si el hilo fue terminado.



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 incluyen este módulo pueden querer realizar tareas adicionales
  # limpieza, que pueden realizar anulando este método.
  return true a no ser que @hilo

  # 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.
  @stop_requested = true

  # Además de configurar la bandera, una clase en particular puede tener información adicional
  # formas de indicarle al hilo en segundo plano que deje de funcionar o
  # Despierta para verificar la bandera de parada, por ejemplo, estableciendo un semáforo.
  # Esto se puede lograr proporcionando el método pre_stop.
  pre_stop

  # Ahora hemos solicitado la terminación elegante y podemos 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 salga.
  # Por ahora, también utilizamos la maquinaria Ruby para solicitar el hilo.
  # ser terminado, y hacerlo inmediatamente.
  #
  # Tenga en cuenta que esto puede provocar que el hilo en segundo plano finalice en
  #en medio de una operación.
  @hilo.matar

  esperar_a_parar
end