Módulo: Mongo::BackgroundThread Private
- Inclui:
- Logável
- Incluído em:
- Cluster::PeriodicExecutor, Servidor::ConnectionPool::Populator, Servidor::Monitor, Servidor::PushMonitor, SRV::Monitor
- Definido em:
- build/ruby-driver-v2.19/lib/mongo/background_thread.rb
Visão geral
Este módulo faz parte de uma API privada. Você deve evitar usar este módulo, se possível, pois ele pode ser removido ou alterado no futuro.
Não inicie ou pare threads em segundo plano em finalizadores. Consulte jira.mongodb.org/browse/RUBY-2453 e bugs.ruby-lang.org/issues/{316288. Quando o intérprete sai, os threads de background são interrompidos primeiro e os finalizadores são invocados em seguida, e as estruturas de dados internas da MRI são essencialmente corrompidas nesse ponto se os threads estiverem sendo referenciados. Antes do desligamento do intérprete, isso significa que os threads não podem ser interrompidos por objetos que saem do escopo, mas o mais provável é que os threads mantenham referências aos mencionados objetos de qualquer maneira, se o trabalho estiver sendo executado, os objetos não Go do escopo em primeiro lugar.
A corrida!, Correndo? e pare! os métodos costumavam fazer parte da API pública em algumas das classes que agora incluem este módulo. Portanto, esses métodos devem ser considerados parte da API pública do driver por motivos de compatibilidade com versões anteriores. No entanto, o uso desses métodos fora do driver está obsoleto.
Resumo constante
Constantes incluídas do Loggable
Recolhimento do Resumo do método de instância
-
#run! ➤ Objeto
Inicie a thread em segundo plano.
- #em execução? ➤ Booleano
-
#pare! ➤ verdadeiro | false
Interrompa o thread em background e aguarde o encerramento por um período de tempo razoável.
Métodos incluídos no Loggable
#log_debug, #log_error, #log_fatal, #log_info, #log_WARN, #logger
Detalhes do método de instância
#run! ➤ Objeto
Inicie a thread em segundo plano.
Se o thread já estiver em execução, esse método não fará nada.
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'build/ruby-driver-v2.19/lib/mongo/background_thread.rb', linha 46 def corra! se @stop_requested && @thread wait_for_stop se @thread.alive? log_service("Iniciando um novo thread de background em #{self}, mas o thread de background anterior ainda está em execução") @thread = nada end @stop_requested = false end se executando? @thread mais comece! end end |
#em execução? ➤ Booleano
63 64 65 66 67 68 69 |
# File 'build/ruby-driver-v2.19/lib/mongo/background_thread.rb', linha 63 def executando? se @thread @thread.alive? mais false end end |
#pare! ➤ verdadeiro | false
Interrompa o thread em background e aguarde o encerramento por um período de tempo razoável.
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-v2.19/lib/mongo/background_thread.rb', linha 77 def pare! # Se o thread não foi iniciado, não há nada para parar. # # As turmas que incluem este módulo podem querer realizar outras # limpeza, que eles podem fazer substituindo esse método. Método true a menos que @thread # Os threads em background geralmente executam operações em um loop. # Este sinalizador deve ser verificado em cada iteração do # loops de trabalho e o thread deve parar de funcionar quando este sinalizador # está definido. @stop_requested = true # Além de definir a bandeira, uma classe específica pode ter # formas de sinalizar à thread em background para parar de funcionar ou # acorda para verificar o sinalizador de parada, por exemplo, definindo um semáforo. # Isso pode ser feito fornecendo o método pre_stop. pre_stop # Agora solicitamos o encerramento correto e podemos esperar # para que a conversa saia por conta própria. Uma versão futura do # driver pode permitir um determinado período de tempo para que o thread seja encerrado. # Por enquanto, também usamos o mecanismo Ruby para solicitar o thread # seja encerrado e faça isso imediatamente. # # Observe que isso pode fazer com que a thread em background termine em # no meio de uma operação. @thread.matar wait_for_stop end |