2009-02-03 1510 views
6

Estaba leyendo en ROR (aún no me he zambullido), y he oído que no es seguro para subprocesos. Obviamente, esto no significa que más de una persona no puede acceder a su sitio al mismo tiempo, entonces, ¿qué significa exactamente? ¿Dónde entran en juego los hilos en ROR? ¿Simplemente se refieren al manejo de la solicitud?¿Qué quieres decir con Ruby on Rails no es seguro para subprocesos?

Respuesta

28

Su información está desactualizada. Es seguro para subprocesos como de 2.2.2

Tenga en cuenta Ruby MRI 1.8.x, la aplicación más utilizada de Rubí utiliza Green Threads, así que con 1.8.x si crea 100 hilos que se ejecutan en la misma CPU. Por lo tanto, al hospedar sitios web de Rails mediante MRI, es probable que desee tantas instancias de Ruby ejecutándose como usted tenga CPUS. Cosas como passenger se ocupan de esto por ti.

Esto solía ser un gran problema para JRuby, porque JRuby tiene hilos nativos, y los procesos de malabares parecen superfluos. De todos modos, está resuelto ahora.

En un lado, Iron Ruby, el intérprete .Net Ruby ejecuta subprocesos nativos.

Nota: Ruby 1.9.1 utiliza subprocesos nativos, pero todavía hay un bloqueo de intérprete global en su lugar.

4

Básicamente lo que está diciendo es que no puede tener múltiples copias de rieles ejecutándose en el mismo proceso bajo diferentes subprocesos porque es posible que algunos recursos se filtren entre los subprocesos causando comportamientos extraños como objetos que aparentemente cambian/desapareciendo en momentos aleatorios.

Además, también podría darse el caso de que las clases no estén diseñadas con ninguna sincronización incorporada, por lo que es difícil colocar partes de los rieles en subprocesos y tener otras partes compartidas entre subprocesos.

0

Vale la pena mencionar que Ruby MRI 1.8.x usa Green Threads, pero Ruby MRI 2 tendrá subprocesos nativos.

+0

en realidad Ruby 1.9 ya tiene hilos nativos .. –

+0

Lo que dices es cierto, pero yo hice la distinción porque 1.9 es la versión experimental que conduce a 2.0. (Algo así como los kernels de Linux impares son experimentales y no deberían usarse en producción.) –

+0

@Benjamin, 1.9 ha sido declarado estable en el sitio web de Ruby, es un cambio masivo de arquitectura sobre 1.8 (ya que está basado en yarv) I no estoy seguro de que el alcance de las características en 2.0 esté hecho. –