hilos de qué sistema operativo se acostumbran en la máquina abstracta de Erlang, BEAM?
-
01-10-2019 - |
Pregunta
he comenzado a estudiar Erlang y encontrar el entorno de ejecución BEAM fascinante. Se afirma comúnmente que en Erlang, procesos pertenecen a la lengua en lugar del sistema operativo (es decir, el tiempo de ejecución, lo que significa BEAM en este caso). Estos son los ligeros, “verdes” que los procesos de Erlang es ser famoso para. Se señaló además (en la página 5 de este documento ) que utiliza BEAM un hilo (1) OS por núcleo de CPU para la programación y otro hilo OS para i / o. Por eso me pregunto:? De lo que el hilo no los ciclos de CPU necesario para ejecutar realmente el código Erlang provenir de
Además, si estoy corriendo en una máquina de doble núcleo que se puede esperar - basado en lo que he leído hasta ahora - para ver tres (3) hilos de ejecución en el marco del proceso de haz: dos planificadores (uno para cada núcleo) y una i / o hilo. Pero veo 10. 11. A veces A veces empieza a los 13 años y, como amplificadores de alta calidad, va a 11.
Estoy confundido. Se apreciará Cualquier penetración.
Solución
Siguiendo el consejo de @ user425720, me preguntó mi pregunta sobre el LISTSERV Erlang preguntas. También está disponible como una Google Grupo . Kresten Krab Thorup de Trifork me respondió casi de inmediato. Mi agradecimiento a salir a Kreston. He aquí su respuesta. (Parentéticos y el énfasis son la mía.)
A continuación, puede que yo sepa, el escenario básico:
Código de Erlang se llevará a cabo en el mayor número "hilos verdes", ya que hay procesos; el límite de proceso es controlado por la bandera + P (línea de comandos).
Los hilos verdes se asignan a S hilos, donde S es el número de núcleos / CPUs. El hecho de que éstos hilos también se llaman programadores puede parecer un tanto confuso, pero desde el punto de máquinas virtuales ver que son. A partir de la década de los desarrolladores punto de vista, que son los hilos que ejecute el código Erlang . los número S se puede controlar con la opción + S para la línea de comandos ERL.
Además presente, hay una serie de los llamados "hilos" asíncronas. Eso es un grupo de subprocesos que se utiliza por I / O procesos llamados vinculados en los conductores, para reaccionar a seleccionar / sondeo, etc. El número de hilos Asynch es dinámica, pero limitado por la bandera + A.
Por lo tanto, los 11 hilos que se ve en una De doble núcleo puede ser de 2 programadores, y 9 hilos asíncrona. Por ejemplo.
Más información acerca de las banderas aquí .
Otros consejos
procesos Erlang no son 'verde' como hilos son de color verde en Java. procesos Erlang son estructuras, que no lo hacen de memoria compartida y que son mantenidos por Erlang VM.
Puede sonar extraño, pero este trabajo podría ser 'viejo' (a pesar de que la bio a partir de 2007). Todo cambió en torno a la liberación R13 cuando llegamos nuevo manejo de colas de tiempo de ejecución (con equilibrio dinámico cosas y otras golosinas). Aquí hay alguna presentación de Ulf Wiger al respecto http: //ulf.wiger.net/weblog/2009/01/23/erlang-programming-for-multicore/
En resumen, los procesos son completamente transparentes y es posible ajustar el número de colas de tiempo de ejecución y programadores, pero la realización del sistema operativo no está intacto. No quiero especular por qué hay como 11 de hilos ..
EDIT: Estoy equivocado acerca un poco OS:
+S Schedulers:SchedulerOnline
Establece la cantidad de hilos de programador para crear e hilos planificador para establecer en línea cuando el soporte SMP ha sido habilitada.
El rango válido para ambos valores son 1-1024. Si el sistema de ejecución de Erlang es capaz de determinar la cantidad de procesadores lógicos configurado y procesadores lógicos disponibles, programadores tomaría el valor procesadores lógicos configurado y
SchedulersOnline
tomaría el valor procesadores lógicos disponibles; de lo contrario, los valores por defecto será 1. Los programadores pueden omitirse si no es:SchedulerOnline
y viceversa. La cantidad de programadores en línea se puede cambiar en tiempo de ejecución a través deerlang:system_flag(schedulers_online, SchedulersOnline)
....
Esta bandera será ignorado si el emulador no tiene soporte para SMP habilitado (ver la
-smp
bandera).
desde aquí: http://www.erlang.org/doc/man/ erl.html
Edit2: Interesante debate en Erlang-pregunta lista de correo en pros y contras de muchas máquinas virtuales frente a muchos programadores. Por desgracia, también es de 2008 y no puede ser válida con enormes mejoras en las nuevas versiones OTP. http://www.erlang.org/ cgi-bin / ezmlm-cgi 4:? mss: 38165: 200 809: nbihpkepgjcfnffkoobf