1) Do Python, Ruby, o Haskell apoyar verdadera multihilo?
Esto no tiene nada que ver con el idioma. Se trata del hardware (si la máquina solo tiene 1 CPU, es simplemente físicamente imposible ejecutar dos instrucciones al mismo tiempo), el sistema operativo (de nuevo, si el sistema operativo no es compatible con multihilo verdadero, no hay nada puedes hacerlo) y el motor de implementación/ejecución del lenguaje.
A menos que la especificación del lenguaje prohíba o imponga explícitamente el multihilo verdadero, esto no tiene absolutamente nada que ver con el idioma.
Todos los idiomas que usted menciona, además de todos los idiomas que se han mencionado en las respuestas hasta el momento, tienen múltiples implementaciones, algunos de los cuales soportan cierto multihilo, otros no, y algunos se construyen en la parte superior de otros motores de ejecución que podrían o no soportar multihilo verdadero.
Tome Ruby, por ejemplo. Éstos son sólo algunos de sus implementaciones y sus modelos de roscado:
- resonancia magnética: hilos verdes, no hay verdaderos multithreading
- YARV: hebras de SO, sin verdaderos multithreading
- Rubinius: hebras de SO, la verdadera multithreading
- MacRuby: hebras de SO, verdaderos multithreading
- JRuby, XRuby: las discusiones de JVM, depende de la JVM (si la JVM soporta cierto multihilo, entonces JRuby/XRuby hace, también, si la JVM no es así, entonces no hay nada que puede hacer al respecto)
- IronRuby, Ruby.NET: al igual que JRuby, XRuby, pero en la línea de comandos en lugar de en la JVM
Véase también my answer to another similar question about Ruby. (Tenga en cuenta que esa respuesta tiene más de un año, y parte de la misma ya no es precisa. Rubinius, por ejemplo, usa hilos nativos verdaderamente simultáneos ahora, en lugar de hilos verdes verdaderamente concurrentes. Además, desde entonces, varios nuevos Ruby implementaciones han surgido, como BlueRuby, tinyrb, Rubí Ir a la ligera, Red Sun y SmallRuby)
similares para Python:.
- CPython: subprocesos nativos, no hay verdaderos multithreading
- PyPy: subprocesos nativos, depende del motor de ejecución (PyPy puede ejecutarse de forma nativa, o encima de una JVM, o en la parte superior de una CLI, o en la parte superior de otro motor de ejecución de Python. Cada vez que la plataforma subyacente soporta cierto multihilo, PyPy también lo hace)
- golondrina sin carga:. Nativo de hilos, en la actualidad hay un verdadero multi-hilo, pero fijo está previsto
- Jython: las discusiones de JVM, ver JRuby
- IronPython: Hilos de la CLI, ver IronRuby
Para Haskell, al menos el compilador Glorious Glasgow Haskell admite verdadero multihilo con hilos nativos. No sé sobre UHC, LHC, JHC, YHC, HUGS o todos los demás.
Para Erlang, both BEAM y HiPE admiten multihilo verdadero con hilos verdes.
2) Si un programa contiene subprocesos, ¿una máquina virtual asignará automáticamente trabajo a múltiples núcleos (o a las CPU físicas si hay más de 1 CPU en la placa base)?
De nuevo: esto depende de la máquina virtual, el sistema operativo y el hardware. Además, algunas de las implementaciones mencionadas anteriormente, ni siquiera tienen Máquinas virtuales.
"true" multihilo? Qué significa eso? Por favor, defina multihilo "verdadero". –
true multithreading = múltiples hilos de ejecución independientes utilizan los recursos proporcionados por varios núcleos (no solo por 1 núcleo) – psihodelia
@ S.Lott: hecho, he actualizado la publicación original – psihodelia