Paralelismo en Julia. Características y Limitaciones


En su artículo de arXiv , los autores originales de Julia mencionan lo siguiente:

2.14 Parallelism. La ejecución paralela es proporcionada por un sistema de procesamiento múltiple basado en mensajes implementado en Julia en la biblioteca estándar. El diseño del lenguaje apoya la implementación de tales bibliotecas por proporcionar corrutinas simétricas, que también se pueden considerar como hilos programados cooperativamente. Esta característica permite asíncrono la comunicación debe ocultarse dentro de las bibliotecas, en lugar de requerir la usuario para configurar callbacks. Julia actualmente no soporta nativo hilos, que es una limitación, pero tiene la ventaja de evitar el complejidades del uso sincronizado de la memoria compartida.

¿Qué quieren decir con que Julia no soporta hilos nativos? ¿Qué es un hilo nativo?

¿Otros lenguajes interpretados como Python o R soportan este tipo de paralelismo? ¿Julia está sola en ¿esto?

Author: StefanKarpinski, 2013-05-07

1 answers

Los"hilos nativos" son contextos de ejecución separados, administrados por el núcleo del sistema operativo, accediendo a un espacio de memoria compartido y potencialmente ejecutándose simultáneamente en núcleos separados. Compare esto con procesos separados, que pueden ejecutarse simultáneamente en múltiples núcleos pero tienen espacios de memoria separados. Asegurarse de que los procesos interactúan bien es fácil ya que solo pueden comunicarse entre sí a través del núcleo. Asegurarse de que los hilos no interactúan de manera impredecible y con errores es muy difícil ya que pueden leer y escribir en la misma memoria de una manera sin restricciones.

La situación de R es bastante sencilla: R no es multihilo. Python es un poco más complicado: Python soporta threading, pero debido a la global interpreter lock (GIL) , no es posible la ejecución concurrente de código Python. Otros lenguajes dinámicos de código abierto populares están en varios estados mixtos con respecto al threading nativo (Ruby: no/kinda/yes?; Nodo.js: no ), pero en general, la respuesta es no, no admiten subprocesos nativos completamente concurrentes, por lo que Julia no está sola en esto.

Cuando agregamos paralelismo de memoria compartida a Julia, como planeamos-ya sea usando hilos nativos o múltiples procesos con memoria compartida – será verdadera concurrencia y no habrá GIL que impida la ejecución simultánea del código de Julia. Sin embargo, esta es una característica increíblemente difícil de agregar a un idioma, como lo atestigua la inexistencia o soporte limitado en otros lenguajes dinámicos maduros muy populares. Agregar un modelo de concurrencia de memoria compartida es técnicamente difícil, pero el verdadero problema es diseñar un modelo de programación que permita a los programadores hacer un uso efectivo de la concurrencia de hardware de una manera productiva y segura. Este problema generalmente no se resuelve y es un área muy activa de investigación y experimentación – no hay un "estándar de oro" para copiar. Podríamos simplemente agregar soporte de hilos POSIX, pero ese modelo de programación es general considerado peligroso e increíblemente difícil de usar de manera correcta y efectiva. Go tiene una excelente historia de concurrencia, pero está diseñado para escribir servidores altamente concurrentes, no para operar simultáneamente en grandes datos, por lo que no está del todo claro que simplemente copiar el modelo de Go sea una buena idea para Julia.

 66
Author: StefanKarpinski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:30