concurrencia en otros lenguajes


El curso de Programación Concurrente del Máster de Computación me ha dotado de los conocimientos básicos necesarios para entender y aplicar la programación concurrente en varios escenarios más allá del lenguaje de programación Java y el paradigma de programación orientada al objeto, y más allá también de los servicios que ofrecen en este sentido los sistemas operativos modernos. Hoy me he puesto a investigar un poco cómo se trata la concurrencia en otros lenguajes y sistemas operativos de los que he tenido contacto en esta asignatura del máster (i.e Java y Microsoft Windows)

El lenguaje Java puede ser interpretado en muchos sistemas operativos como Microsoft Windows y la familia Unix/Linux. De hecho yo he podido ejecutar los ejemplos en Java desarrollados en la asignatura en Ubuntu y Debian Linux. La razón es que las máquinas virtuales java implementan la concurrencia dentro del lenguaje. Al final las máquinas virtuales deben hacer uso de los servicios en este sentido que les proporcionan los sistemas operativos.

En el caso de Linux, según he podido descubrir, se soporta la programación con threads de forma nativa en C gracias a su implementación del estándar POSIX Threads (pthread) El kernel de Linux y librerías básicas como GNOME glib y GNU libc implementan los threads. La historia de la implementación de la programación de threads en Linux tanto a nivel de kernel como a nivel de usuario se resume en dos proyectos LinuxThreads y NPTL (Native POSIX Thread Library) El primero supuso la implementación imperfecta del estándar POSIX y el segundo la plena implementación, realizada por IBM, que a la postre fue adoptada por la comunidad. Para tener una experiencia de primera mano en la programación de threads de forma nativa en Linux se puede ver el tutorial de YoLinux en el que se tiene la teoría y numerosos ejemplos con los que puedo comparar con los ejemplos que he recibido y realizado en Java en el máster.

¿Qué ocurre con C++? Este lenguaje se puede considerar como el equivalente a Java (y Ada) en cuanto al paradigma de programación orientada a objetos. En C++ como C no tenemos soporte nativo del lenguaje para la programación concurrente por lo que tiene que implementarse con ayuda de librerías externas que hagan uso de los servicios que proporcionan los sistemas operativos. He podido averiguar que existen de hecho implementaciones que permiten la programación con threads en C++ en Linux. Aquí no existe un estándar claro como en el caso de POSIX Threads en C. Lo más cerca que hay de un estándar en mi opinión es la implementación que ofrece Boost Thread (parte de la librería Boost C++) que está basada en varias propuestas realizadas al comité del ISO encargado de la estandarización del C++ (N2497, N2320, N2184, N2139, y N2094)

Yo por mi arte en Ubuntu he encontrado una implementación no estándar llamada uC++ (ver más referencias)

En cuanto al último lenguaje mencionado, Ada, que también se trata en el máster (aunque yo no he podido asistir a las clases del mismo debido a causas de fuerza mayor) he averiguado que la concurrencia se realiza por medio de las tareas (tasks) y que está implementada de forma nativa en el lenguaje. Se puede consultar una buena introducción en un wikibook de la wikipedia y los apuntes de una universidad canaria, para empezar.

Un comentario en “concurrencia en otros lenguajes

  1. Java basa su implementación de threads en las especificaciones descritas en el documento elaborado por el grupo de expertos JSR 166. Dos de los miembros del grupo de expertos que elaboran la especificación de concurrencia en Java, incluido el líder Doug Lea (que mantiene una página web muy interesante sobre el tema) y el miembro Brian Goetz son los autores de sendos libros donde se explican la concurrencia en Java que forman parte de los recursos que puedo consultar en la biblioteca de la facultad de ciencias y en la biblioteca de la escuela de ingenieros:

    Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, Doug Lea. Java Concurrency in Practice. Addison-Wesley Professional (2006) IND M C61 19

    Doug Lea. Concurrent Programming in Java(TM) Design Principles and Patterns. Java Series from the source. Addison-Wesley (1997)

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s