2009-07-29 11 views
5

Entonces, Ruby 1.9.1 ahora es declared stable. Se supone que Rails debe trabajar con él y lentamente se le transfieren gemas.Hilos nativos en Ruby 1.9.1, ¿qué hay para mí?

Tiene subprocesos nativos y un bloqueo de intérprete global (GIL).

Dado que un GIL está en su lugar, ¿los subprocesos nativos ofrecen algún tipo de beneficio sobre los subprocesos verdes en 1.9.1?

Respuesta

4

Creo que la gran victoria es que las extensiones basadas en C can release the GIL. Por lo tanto, por ejemplo, un adaptador MySQL puede ejecutar consultas de bases de datos de larga ejecución sin necesidad de bloquear todas las demás cadenas de Ruby.

7

Los subprocesos en 1.9 son nativos, pero se han "ralentizado" para permitir que solo se ejecute un subproceso a la vez. Esto se debe a que confundiría el código existente si los hilos realmente se ejecutan en paralelo.

Pros:

  • IO es ahora asíncrono en hilos. Si un hilo se bloquea en IO, entonces otro hilo continuará hasta que el IO finalice.
  • Las extensiones C pueden usar el enhebrado verdadero.

Contras:

  • Cualquier extensión de C que no es seguro para subprocesos pueden tener problemas que son difíciles de encontrar cuando se utiliza hilo. No hay forma de marcar una extensión como insegura para evitar que se use con Threads.
  • El nombre de clase es el mismo. La clase de threading nativa debería haber sido nombrada de otra manera.
  • Y lo peor de todo, ¡el enhebrado funciona de forma diferente en diferentes plataformas! Por ejemplo, priority() es diferente entre Solaris, Windows y Linux. Cosas como loop {} funcionan bien en Linux, otros hilos tienen la oportunidad de ejecutarse. Sin embargo, en los subprocesos de Solaris que bloquean el tiempo del proceso, ¡nunca saldrá!
Cuestiones relacionadas