He estado leyendo sobre concurrencia, subprocesos múltiples y cómo "se acabó el almuerzo gratis" . Pero aún no he tenido la posibilidad de usar MT en mi trabajo.
Por lo tanto, estoy buscando sugerencias sobre lo que podría hacer para practicar algo de MT pesado de CPU a través de ejercicios o participación en algunos proyectos de código abierto.
Gracias.
Editar: Estoy más interesado en proyectos de código abierto que usan MT para tareas vinculadas a la CPU, o simplemente algoritmos que son interesantes de implementar usando MT, en lugar de libros o documentos que solo describen las herramientas como hilos, mutexes y bloqueos, o cómo se puede usar MT para tener GUI receptivas ...
learning
multithreading
Xavier Nodet
fuente
fuente
Respuestas:
El artículo de Joseph Albahari sobre Threading en C # es uno de los mejores recursos que he visto.
La tabla de contenido está abajo. Tenga en cuenta que algunos de los temas, como la Biblioteca de tareas paralelas, son específicos de .NET, pero gran parte de ellos son aplicables a otros lenguajes, especialmente a Java.
También puede echar un vistazo al tutorial de Jon Skeet aquí: http://www.yoda.arachsys.com/csharp/threads/
fuente
Java Concurrency in Practice es uno de los mejores libros sobre subprocesos múltiples y concurrencia. Aunque todos los ejemplos en el libro están basados en Java, este libro ofrece una explicación sólida del mundo MT. Me ayudó mucho cuando estaba desarrollando un sistema MT.
fuente
El Capítulo 11 del libro Intel Threading Building Blocks de James Reinders está dedicado a ejemplos de algoritmos y proyectos que hacen uso de la computación paralela (o programación paralela): un buscador de subcadenas, el juego de la vida, un tamiz de Eratóstenes, Matrix Multiply y luego otros temas más avanzados como filtrado de paquetes de red y juegos.
fuente
Encontré la Programación concurrente en Windows de Joe Duffy muy útil. Hay mucha profundidad. No tira ningún golpe, por lo que realmente tiene una buena idea de cuántas maneras hay de dispararse en el pie. Me ayudó a ser cauteloso, que es el mejor consejo que puedo dar a cualquiera que empiece con aplicaciones MT.
fuente
Hay una diferencia entre concurrencia y paralelismo. La concurrencia es el acto de hacer más de una cosa a la vez, como escribir en 2 archivos. El paralelismo es el acto de acelerar los programas mediante el uso de múltiples núcleos.
Aunque no hay almuerzo gratis cuando se trata de concurrencia, en paralelo el almuerzo ciertamente se está volviendo más libre, vea desarrollos como http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell
fuente
Este sitio tiene algunos buenos ejemplos de proyectos en general. www.planet-source-code.com
Simplemente elija un idioma y busque multihilo. Debería ver varios proyectos con código fuente disponible.
fuente