La programación con hilos en bruto tiene muchas trampas. La lista interminable de problemas incluye, entre otros, puntos muertos, bloqueos en vivo, condiciones de carrera, uso compartido y uso compartido falso. Algunos recursos que me han ayudado mucho son:
1) El papel “Lo que todo programador debe saber sobre la memoria”. http://people.freebsd.org/~lstew…. Es bastante largo, pero las secciones de multiprocesador entran en detalles insoportables sobre las razones por las que existen las mejores prácticas en primer lugar. Aquí se explican detalles sutiles como uso compartido falso, protocolos de coherencia de caché, problemas de alineación.
2) Para hacer un resumen de algunos de los detalles, los lenguajes de programación compatibles con subprocesos como C ++ 11 y Java5 + proporcionan un modelo de memoria. Los modelos de memoria proporcionan un modelo formal para razonar sobre el código multiproceso. Encuentro el modelo de memoria C ++ 11 más detallado que el de Java. Dado que es más nuevo, esto no es una sorpresa. Encontré el libro C ++ Concurrency in Action una gran lectura. Tiene excelentes ejemplos y es bastante accesible incluso si su C ++ no es de primera categoría.
3) Los sitios web y blogs dedicados a la programación concurrente me ayudan a comprender los problemas prácticos aún más. 1024cores es uno de los mejores recursos disponibles para la programación de subprocesos. El autor Dmitry Vyukov realmente sabe lo que hace, y las versiones de su código se encuentran en muchos proyectos populares de código abierto como Akka, Rust, Go, etc. El blog Mechanical Sympathy mantenido por Martin Thompson también es impresionante. Su enfoque es más en Java y el campo de la informática de alto rendimiento. Tiene excelentes publicaciones sobre programación multiproceso y sus observaciones también se aplican al código que no es Java. Reviso viejos mensajes suyos de vez en cuando, solo para refrescar mi memoria.
- ¿Cuáles son algunos libros frecuentemente prohibidos?
- ¿Cuáles son algunos buenos artículos, libros, videos, etc. relacionados con la gestión comunitaria?
- ¿Cuáles son algunos libros sobre el almacenamiento de tablas de Azure?
- ¿Cuáles son algunos de tus cómics favoritos?
- ¿Cuáles son algunas obras académicas y literarias integrales sobre el hinduismo y la historia hindú?
4) El código fuente de proyectos reales es útil para ver cómo se unen las diferentes piezas. Estoy especialmente interesado en el modelo de actor y CSP y he leído implementaciones de los proyectos Akka, Golang y Rust para ver qué tipo de elecciones tomaron para las estructuras de datos subyacentes y los algoritmos de programación. Leer el código del kernel también es realmente útil. Bienvenido a LWN.net tiene muchos artículos interesantes.