Articulo de referencia

JCSP

JCSP es una implementación de procesos secuenciales comunicantes (CSP) para el lenguaje de programación Java . [ 1 ] Aunque CSP es un sistema matemático, JCSP no requiere conoci...

JCSP es una implementación de procesos secuenciales comunicantes (CSP) para el lenguaje de programación Java . [ 1 ]

Aunque CSP es un sistema matemático, JCSP no requiere conocimientos matemáticos avanzados, lo que permite a los programadores lograr un software que funcione correctamente siguiendo reglas sencillas.

Descripción general

Hay cuatro formas en que los programas multihilo pueden fallar sin poder ser probados: [ 1 ]

  • Condiciones de carrera : las variables compartidas pueden tener un estado indeterminado porque varios hilos acceden a ellas simultáneamente sin un bloqueo suficiente.
  • Interbloqueo : dos o más hilos llegan a un punto muerto cuando intentan adquirir bloqueos u otros recursos de forma conflictiva.
  • Livelock : similar a un interbloqueo, pero que resulta en una pérdida interminable de tiempo de CPU.
  • Inanición : uno o más hilos no realizan ningún trabajo, lo que compromete el resultado previsto de los algoritmos del software.

En general, no es posible demostrar la ausencia de estos cuatro riesgos únicamente mediante pruebas rigurosas. Si bien las pruebas rigurosas son necesarias, no son suficientes. En cambio, es necesario contar con un diseño que pueda demostrar que estos cuatro riesgos no existen. CSP permite realizar esto mediante matemáticas, y JCSP permite hacerlo de forma pragmática en programas Java.

La ventaja de basarse en las matemáticas radica en que permite ofrecer garantías más sólidas de un comportamiento correcto que las que se obtendrían con un desarrollo ad hoc convencional . Afortunadamente, JCSP no obliga a sus usuarios a adoptar un enfoque matemático por sí mismos, sino que les permite beneficiarse de las bases matemáticas de la biblioteca.

Cabe señalar que el término " proceso" de CSP se utiliza esencialmente como sinónimo de " hilo" en la jerga de Java; un proceso en CSP es una unidad de ejecución ligera que interactúa con el mundo exterior a través de eventos y es un componente activo que encapsula las estructuras de datos sobre las que opera.

Debido a que la encapsulación de datos es por hilo (por proceso , según la terminología de CSP), normalmente no es necesario compartir datos entre hilos. En cambio, el acoplamiento entre hilos se produce mediante puntos de comunicación y encuentros bien definidos. La ventaja es que cada hilo puede considerarse, en términos generales, como una entidad de "un solo hilo" durante su diseño, lo que evita al desarrollador la incertidumbre de si usar o no la palabra clave ` synchronized` de Java y dónde usarla , y al mismo tiempo garantiza la ausencia de condiciones de carrera. JCSP proporciona principios claros para diseñar la comunicación entre hilos de forma que se demuestre que está libre de interbloqueos.

Existe una clara similitud entre algunas clases de la API estándar de Java ( java.util.concurrent ) y algunas de JCSP. Las clases de canal de JCSP son similares a BlockingQueue . Hay una diferencia importante: JCSP también proporciona una clase Alternative para permitir la selección entre entradas; esta funcionalidad no está presente en la API estándar de Java. La alternancia es uno de los conceptos fundamentales que CSP utiliza para modelar eventos del mundo real.

Se demostró que Alternative funciona correctamente mediante un análisis matemático exhaustivo de su espacio de estados, lo que garantiza que nunca puede provocar un bloqueo. [ 2 ] Por lo tanto, personifica la fiabilidad de JCSP desde su base matemática.

Capa de red

Dado que los sockets del Protocolo de Control de Transmisión (TCP) pueden configurarse para comportarse como canales de bloqueo en el sentido de CSP, es posible distribuir procesos JCSP entre varios ordenadores. Esto se logra mediante la extensión JCSP Net, que proporciona canales con semántica CSP utilizando TCP. Como CSP es compositivo, en términos de comportamiento, no importa si los procesos están ubicados en el mismo equipo o distribuidos. La única diferencia radica en el rendimiento relativo. Por lo tanto, es posible, por ejemplo, desarrollar una aplicación en un único servidor y luego comparar versiones multiprocesador de la misma aplicación con el objetivo de optimizar el rendimiento.

Otras versiones

Edición robot

JCSP re es una versión muy reducida de los paquetes JCSP desarrollados alrededor de 2008 en la Universidad Napier de Edimburgo por el profesor Jon Kerridge, Alex Panayotopoulos y Patrick Lismore. La investigación sobre JCSP para entornos robóticos y JCSP para entornos móviles es un área de investigación activa en la Universidad Napier de Edimburgo. La implementación funcional de 'JCSP re' permite el desarrollo del mismo software concurrente para robots. Específicamente, los robots seleccionados para esta investigación fueron los Lego Mindstorms NXT porque pueden ejecutar la popular máquina virtual LeJOS NXJ que ejecuta código fuente Java. [ 3 ]

Utilizar JCSP de otros lenguajes

JCSP es esencialmente una API puramente Java (aunque existe una alternativa de investigación que utiliza la extensión C-CSP para la JVM). Por lo tanto, en principio es sumamente adecuada para la concurrencia en aplicaciones Scala y Groovy , así como en aplicaciones Java.

Por lo tanto, JCSP puede ofrecer una alternativa al modelo de actores de Scala . JCSP utiliza comunicación sincronizada, mientras que los actores utilizan comunicación con búfer (asíncrona), cada una con sus ventajas en determinadas circunstancias. JCSP permite el almacenamiento en búfer de sus canales, por lo que puede emular fácilmente el modelo de actores; lo contrario no es posible.

Véase también

Referencias

  1. 1 2 Belapurkar, Abhijit (21 de junio de 2005). "CSP para programadores Java" . IBM DeveloperWorks . Recuperado el 20 de abril de 2007 .
  2. Welch, Peter; Martin, Jeremy (2000). Análisis formal de sistemas Java concurrentes . Arquitecturas de procesos comunicantes 2000 (Informe).
  3. Kerridge Jon; Panayotopoulos Alex; Lismore Patrick (2008). "JCSPre: The Robot Edition to Control LEGO NXT Robots" . Communicating Process Architectures 2008. Concurrent Systems Engineering Series. IOS Press Books. doi : 10.3233/978-1-58603-907-3-255 . Archivado del original el 18 de abril de 2010.{{cite book}}: CS1 maint: bot: estado de la URL original desconocido ( enlace )
  • Proyecto JCSP en la Universidad de Kent
  • JCSP re lanzamiento de la versión beta temprana