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 está disponible en https://github.com/gallir/concurrencia
Ingeniero en Informática y Doctor en Ciencias de la Computación. Enseñó Sistemas Operativos y Programación Concurrente en la Universitat de les Illes Balears desde 1993 a setiembre de 2015. Socio-fundador y programador del popular agregador social Menéame.
Libro sobre concurrencia, con muchos ejemplos y apto para varios niveles. Se tratan varias estrategias y algoritmos, incluyendo los menos eficaces, lo que ayuda al lector a comprender mejor la materia, sobre todo al avanzar hacia los métodos más modernos y complejos.
El texto está muy bien cuidado, está escrito con una clara función didáctica y al mismo tiempo con rigor y profundidad, con independencia de la especialización del lector. Hay un esfuerzo palpable (y exitoso) de mostrar con código lo que se dice.
Las ilustraciones son otro punto fuerte, como lo es el código de ejemplo y la confección del epub (mi copia es epub, de google books, no para kindle), de lo mejor que he visto hasta ahora.
El tipo de libro que sería bueno leer de cada materia... si existiese un libro así para cada una.
Es la versión impresa de la digital. La única diferencia es que el código fuente completo no está incluido, por razones obvias. Pero este está disponible en el repositorio de Github: https://github.com/gallir/concurrencia
El tema de concurrencia es café para muy cafeteros.
Aún así Ricardo Galli consigue adentrarte en el mundo de la concurrencia de una manera muy natural, explicando históricamente las soluciones propuestas y los problemas que surgen con cada nueva solución, la eterna lucha entre el programador/ingeniero y la máquina.
Los primeros temas fueron nostálgicos porque recuerdan a las asignaturas de la carrera y tienen un nivel bastante aceptable, a medida que se va metiendo en los temas 3 y 4 hay mucha terminología más moderna y se empieza a hacer pesado. CAS, TAS, etc logaritmos y acciones son difíciles de asimilar, pero cuando pasamos los temas de hardware y spinlocks avanzado de alguna manera extraña gran parte de esos términos no nos parecen tan alejados y empieza a hablar de cosas muy interesantes. Semáforos, FUTEX, Monitores, Canales. Cuando llega al tema de Canales, sus ejemplos en Go son como una oleada de aire fresco para revitalizar y simplificar el código.
Muy curiosos los hechos históricos, el bug marciano, la llegada al mismo algoritmo por equipos distintos, lo que nos queda por venir con la Memoria transaccional.