Principios y algoritmos de concurrencia

El libro ya está en venta desde el 13 de junio de 2015, dos días antes de lo previsto.

Versión impresa (desde el 21/8/2015)

Amazon.ES, Amazon.COM (y cualquier otro sitio de Amazon europeo).

CreateSpace.

eBook

En Amazon Kindle (sin DRM).

En Google Play (sin DRM, también os permite bajar el ePub o un PDF).


La página del libro en Facebook y en Goodreads.

En Google Books (podéis ver bastante del contenido). Las opiniones que veo sobre el libro.

Las fe de erratas de las diferentes versiones.


La programación concurrente es la composición de módulos que se ejecutan independientemente de forma no determinista. 

El paralelismo es una forma de ejecutar programas concurrentes. La programación concurrente es la forma de estructurar los programas, no el número de procesadores que se usa para su ejecución.

Los estudios de concurrencia y paralelismo son diferentes. El primero se ocupa de la correcta composición de componentes no deterministas, el segundo de la eficiencia asintótica de programas con comportamiento determinista.


Con la popularización de los multiprocesadores la programación concurrente es un tema de moda. Pero hay mucha confusión y desconocimiento sobre qué es concurrencia y sus principios y algoritmos fundamentales. No hay muchos libros accesibles y actualizados que cubran estos temas de forma estructurada, genérica, con un enfoque moderno y a precios razonables. Este libro intenta llenar ese hueco, es accesible pero completo, riguroso y autocontenido.

Está orientado a estudiantes o programadores que desean actualizarse o completar sus conocimientos programación concurrente. Aunque se explican algoritmos y técnicas complejas no se requieren ni se suponen conocimientos de concurrencia, solo experiencia en programación, estructuras de datos básicas y deseos de aprender.

El libro comienza con los conceptos más básicos de procesos e hilos y avanza incrementalmente hasta las técnicas más sofisticadas. No se introduce ningún concepto que no se explique al menos brevemente. Cada abstracción y algoritmo importante está explicado en detalle y con programas que se pueden compilar y ejecutar.

Algunos de los temas son los que se suelen estudiar en asignaturas universitarias de programación concurrente: sincronización, el problema de exclusión mutua y sincronización con semáforos, monitores y canales. Además se tratan temas más avanzados y sus últimos desarrollos, como instrucciones de hardware, optimizaciones de spinlocks y la interfaz FUTEX del núcleo Linux para la implementación de construcciones de sincronización eficientes.

Para cada tema se explican el origen, conceptos y algoritmos fundamentales, siempre acompañados de ejemplos y código fuente en lenguajes populares (C, Python, Java, Go) que funcionan en arquitecturas modernas. Los programas están preparados y probados para que funcionen sobre cualquier sistema GNU/Linux, incluidas Raspberry 1 y 2.

El libro está diseñado y formateado para ser leído con comodidad en lectores de ebooks.


El código fuente de los numerosos ejemplos están disponibles en Github.

No explicaré nada que no puede mostrar con código funcional.

El índice tentativo del libro:

  1. Manifiesto
  2. Procesos y concurrencia
  3. Exclusión mutua
  4. La realidad del hardware moderno
  5. Soluciones por hardware
  6. Spinlocks
  7. Semáforos
  8. FUTEX
  9. Monitores
  10. Canales
  11. Memoria transaccional
  12. Epílogo
  13. Referencias
  14. Código fuente

La portada es de Damián Vila.

Las ilustraciones son de JRMora.