2011-10-26 7 views
5

¿Está bien que no llame al Thread#join? En este caso, no me importa si el hilo explota, solo quiero que Unicorn siga procesando.¿Está bien que no llame a Thread # join?

class MyMiddleware 
    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    t = Thread.new { sleep 1 } 
    t.join # is it ok if I skip this? 
    @app.call env 
    end 
end 

¿Me sale "zombie threads" o algo por el estilo?

Respuesta

7

Está perfectamente bien no llamar al join - de hecho, join a menudo no es necesario en absoluto con código multiproceso. Solo debe llamar al join si necesita bloquear hasta que se complete el nuevo hilo.

No obtendrá un hilo "zombie". El nuevo hilo se ejecutará hasta su finalización, luego se limpiará por ti.

+0

Estoy de acuerdo, unirse es increíblemente sobrevalorado. Es útil al principio cuando le enseñas a la gente sobre los hilos, pero una vez que entiendes cómo funcionan realmente los hilos, te das cuenta de que las uniones realmente limitan tu capacidad para realizar subprocesos de manera efectiva. Un patrón que noto es que las uniones generalmente solo se usan en hilos de corta duración, como hilos de trabajo. Ejemplo: el hilo administrador genera 10 hilos de trabajo, luego los une a todos, reúne sus resultados y lo procesa. – corsiKa

+0

@glowcoder Exactamente, y, a menudo, hay mejores opciones que unirse en esas situaciones, según la plataforma y las bibliotecas que esté utilizando ... –

Cuestiones relacionadas