¿Cuáles son los mejores recursos para aprender sobre concurrencia y aplicaciones de subprocesos múltiples? [cerrado]

16

Me di cuenta de que tengo una enorme brecha de conocimiento cuando se trata de aplicaciones multiproceso y programación concurrente. Ya he cubierto algunos conceptos básicos en el pasado, pero la mayoría parece haber desaparecido de mi mente, y definitivamente es un campo sobre el que quiero y necesito tener más conocimiento.

¿Cuáles son los mejores recursos para aprender sobre la creación de aplicaciones concurrentes? Soy una persona muy práctica, por lo que si dicho libro contiene ejemplos concretos, mejor, pero estoy abierto a sugerencias. Personalmente prefiero trabajar en pseudocódigo o C ++, y una inclinación hacia el desarrollo del juego sería lo mejor, pero no es obligatorio.

Zepee
fuente
¿Prefieres "trabajar en pseudocódigo"? ¡Espero que eso funcione para usted! :)
logc

Respuestas:

6

Estos son los libros que he encontrado útiles últimamente:

Concurrencia de Java en la práctica : por el autor de muchas de las utilidades de concurrencia de Java. Algo específico de Java, pero muy claro e informativo sobre los peligros y peligros de los hilos.

El arte de la concurrencia : no es un tratado teórico deslumbrante como sugiere el título, de hecho, es un compendio bastante sencillo y práctico de consejos y ejemplos útiles.

Concurrencia de programación en la JVM : en realidad, este es un tratado teórico deslumbrante, pero muy, muy legible y perspicaz. Si necesita saber qué son STM o actores, cuáles son sus fortalezas y debilidades y por qué , este libro le informará.

Hay muchas bibliotecas de utilidades dedicadas, como los Intel Threading Building Blocks o la Grand Central Station de Apple, que generalmente tienen sus propios manuales dedicados, que generalmente son bastante buenos, y de todos modos son de lectura obligatoria si quieres hacer algo grande con ellos.

Kilian Foth
fuente
4

He encontrado este recurso de subprocesamiento gratuito presentado por Joe Albahari excelente ...

Enhebrado en C #

Está inclinado hacia C # pero los conceptos son completamente aplicables a otros lenguajes. También proporciona el tutorial como descarga en PDF en inglés y en varios otros idiomas. Lo recomendaría debido a la combinación de código de ejemplo, explicaciones paso a paso del código y excelentes diagramas de secuencia y estado que acompañan a los ejemplos.

El tutorial tiene cinco partes:

Está disponible en forma de libro aquí: C # 4.0 en pocas palabras (capítulos 23 y 24)

dodgy_coder
fuente
1
+1, esta es mi referencia habitual "ir a" para subprocesos / concurrencia / paralelismo en .NET
Matthew King
4

Hay muchos modelos de concurrencia, por lo que es mejor que tenga una buena idea sobre todos antes de decidir cuál elegir. Para eso, recomiendo el libro Seven Concurrency Models in Seven Weeks: When Threads Unravel . Revise las reseñas y el TOC y podrá ver por qué este es un buen libro. Y también es reciente (2014).

sakisk
fuente
1

Ahora hay instalaciones de subprocesamiento en el estándar C ++. Entonces, si desea aprender en C ++, le sugiero que lea una revisión simple de la nueva función del lenguaje antes de dirigirse a un tutorial genérico de subprocesos. Luego regrese y revise el estándar con más detalle más adelante.

En la práctica, el enhebrado es una de esas cosas que la mayoría de las personas piensan que entienden, pero que no entienden. Fui a una charla de un investigador de análisis estático que identificó las condiciones de carrera en una base de datos de investigación de IBM (Java), en un sistema de archivos de Linux (C) y en otros proyectos de alto perfil. Algunos de los proyectos fueron escritos por respetados expertos en concurrencia e hilos. Tenga en cuenta que crear un código seguro para subprocesos es difícil y que la brecha de conocimiento no es exclusiva de quienes lo reconocen en sí mismos.

Aunque no te ayudará directamente en la programación de juegos, recomendaría mirar algunos tutoriales de MPI (lo siento, no hay recomendaciones específicas). Si bien parece difícil escribir el código concurrente correcto con hilos, parece bastante fácil hacerlo con el paso de mensajes. Indirectamente, la esperanza es que explorar diferentes modelos de concurrencia ayudará a su propio proceso de pensamiento sobre la estructuración de su código para que sea seguro para subprocesos.

ccoakley
fuente
1

Para aprender sobre la concurrencia, use un lenguaje diseñado para la concurrencia. Golang es una buena opción ya que tiene soporte integrado para la concurrencia y una sintaxis tipo C que hace que el lenguaje sea fácil de aprender para la mayoría de los programadores.

Tiene paso de mensajes, mutexes, etc. que cubren casi todas sus necesidades de concurrencia y que tienen equivalentes más complicados en otros idiomas.

Por ejemplo, recibir un int de otro hilo en variable ausando MPI en C:

MPI_Recv(&a, 1, MPI_INT, 0, 0, MPI_COMM_WORLD,MPI_STATUS_IGNORE);

Recibiendo un int en la variable a desde otro hilo (usuario) en go:

a := <-c

Para aprender go en la práctica, echa un vistazo al tour go, donde puedes escribir, compilar y ejecutar el código go en tu navegador.

tour.golang.org

Para saltar a la parte de concurrencia

http://tour.golang.org/concurrency/1

Mi antiguo profesor realizó un curso corto muy popular para estudiantes de CS de primer año sobre el tema de la concurrencia. Para una introducción rápida, pero exhaustiva, de lo que es la concurrencia, definitivamente recomiendo leer esto.

Fundamentos de la programación concurrente.

Johan Wikström
fuente