JCSP

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

JCSP es una implementación de comunicación de procesos secuenciales (CSP) para el lenguaje de programación Java.

Aunque CSP es un sistema matemático, JCSP no requiere habilidades matemáticas profundas, sino que permite que los programadores puedan lograr un software con buen comportamiento siguiendo reglas simples.

Descripción general

Hay cuatro formas en las que los programas multiproceso pueden fallar de manera incomprobable:

  • Condiciones de carrera – variables compartidas pueden tener estado indeterminado porque varios hilos los acceden simultáneamente sin suficiente bloqueo
  • Deadlock – dos o más hilos alcanzan un estancamiento cuando intentan adquirir cerraduras u otros recursos de manera conflictiva
  • Livelock – similar al estancamiento pero resultando en una pérdida interminable de tiempo de CPU
  • Starvation – uno o más hilos no funcionan, comprometiendo el resultado deseado de los algoritmos de software

Generalmente, no es posible demostrar la ausencia de estos cuatro peligros simplemente mediante pruebas rigurosas. Aunque son necesarias pruebas rigurosas, no son suficientes. En cambio, es necesario tener un diseño que pueda demostrar que estos cuatro peligros no existen. CSP permite que esto se haga usando matemáticas y JCSP permite que se haga de manera pragmática en programas Java.

El beneficio de la base en matemáticas es que se pueden producir garantías más sólidas de comportamiento correcto de lo que sería posible con el desarrollo ad hoc convencional. Afortunadamente, JCSP no obliga a sus usuarios a adoptar ellos mismos un enfoque matemático, sino que les permite beneficiarse de las matemáticas que sustentan la biblioteca.

Tenga en cuenta que el término CSP proceso se utiliza esencialmente como sinónimo de hilo en el lenguaje Java; un proceso en CSP es una unidad de ejecución liviana que interactúa con el mundo exterior a través de eventos y es un componente activo que encapsula las estructuras de datos en las que opera.

Debido a que la encapsulación de datos es por subproceso (por proceso en el lenguaje CSP), normalmente no se depende del intercambio de datos entre subprocesos. En cambio, el acoplamiento entre subprocesos se produce a través de puntos de comunicación y encuentros bien definidos. La ventaja es que, en términos generales, se puede considerar que cada hilo es un hilo de "un solo hilo". entidad durante su diseño, evitando al desarrollador la incertidumbre de si usar y dónde usar la palabra clave synchronized de Java y, al mismo tiempo, garantizando la libertad de condiciones de carrera. JCSP proporciona principios claros para diseñar la comunicación entre subprocesos de una manera que esté demostrablemente libre de interbloqueos.

Existe una clara similitud entre algunas clases de la API de Java estándar (java.util.concurrent) y algunas de JCSP. Las clases channel de JCSP son similares a BlockingQueue. Hay una diferencia importante: JCSP también proporciona una clase Alternativa para permitir la selección entre entradas; esta capacidad está ausente en la API de Java estándar. La alternancia es uno de los conceptos centrales que utiliza CSP para modelar eventos en el 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 podrá causar un punto muerto por sí solo. Como tal, personifica la confiabilidad de JCSP desde su base matemática.

Capa de red

Debido a que los sockets del Protocolo de control de transmisión (TCP) se pueden construir para comportarse como canales de bloqueo en el sentido de CSP, es posible distribuir procesos JCSP entre múltiples computadoras. Esto se logra utilizando la extensión JCSP Net que proporciona canales con semántica CSP usando TCP. Debido a que la CSP es composicional, no importa en términos de comportamiento si los procesos están coubicados o distribuidos. La única diferencia está en el rendimiento relativo. Así, es posible, por ejemplo, desarrollar una aplicación en un único servidor y luego comparar la versión 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 del 'JCSP re' permite el desarrollo del mismo software concurrente para robots. Específicamente, los robots objetivo de esta investigación fueron los Lego Mindstorms NXT porque pueden ejecutar la popular máquina virtual LeJOS NXJ que ejecuta código fuente Java.

Usando JCSP de otros idiomas

JCSP es esencialmente una API de Java pura (aunque existe una alternativa de investigación que utiliza la extensión C-CSP para JVM). Como tal, en principio es muy adecuado para la concurrencia en aplicaciones Scala y Groovy, así como en aplicaciones Java.

Por lo tanto, JCSP puede proporcionar una alternativa al modelo de actor de Scala. JCSP utiliza comunicación sincronizada y los actores utilizan comunicación almacenada en búfer (asíncrona), cada una de las cuales tiene sus ventajas en determinadas circunstancias. JCSP permite que sus canales se almacenen en buffer para poder emular fácilmente el modelo de actor; lo contrario no es cierto.

Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save