Durante el año pasado, he estado trabajando mucho en la concurrencia en Java y he desarrollado y trabajado en muchos paquetes concurrentes. Entonces, en términos de desarrollo en el mundo concurrente, tengo bastante confianza. Además, estoy muy interesado en aprender y comprender más sobre la programación concurrente.
Pero no puedo responderme a mí mismo, ¿qué sigue? ¿Qué extra debo aprender o trabajar para heredar más habilidades relacionadas con el procesamiento de múltiples núcleos? ¿Si hay algún buen libro (leído y disfrutado de 'concurrencia en la práctica' y 'programación concurrente en Java') o recursos relacionados con el procesamiento de múltiples núcleos para que pueda pasar al siguiente nivel?
concurrency
multi-core
Jatin
fuente
fuente
Respuestas:
Descargo de responsabilidad: no soy un experto en concurrencia, pero mi coautor sí, lo estoy refiriendo a él :-)
Como has leído los libros de Doug Lea y Brian Goetz, definitivamente has cubierto el mejor material disponible hasta la fecha.
En el futuro, están las nuevas mejoras de concurrencia en Java 7. Lo más notable es el framework Fork / Join y las nuevas API asíncronas NIO.
Java 8 introducirá nuevas mejoras de concurrencia con colecciones lambdas / paralelas.
Otra cosa a considerar seriamente son formas alternativas de tratar con la concurrencia. Para ser franco, el enfoque de 'bloquear objetos mutables' de Java siempre será propenso a errores, sin importar cuánto se mejoren las API. Por lo tanto, recomiendo mirar el modelo de actor de Scala y el STM de Clojure como formas alternativas de lidiar con los problemas de concurrencia mientras se mantiene la interoperabilidad con Java.
[advertencia -> autopublicidad] Así que, naturalmente, recomendaré nuestro próximo libro, The Well-Grounded Java Developer , que cubre todas las cosas que mencioné anteriormente: -). [/ warning]
Para no olvidarlo, Groovy también tiene una librería Gpars altamente recomendada, aunque no la he usado personalmente.
fuente
El lenguaje de programación D proporciona dos paradigmas para la programación concurrente, los cuales tienen sus usos y son bastante interesantes.
std.concurrency proporciona el paso de mensajes sin uso compartido de memoria predeterminado. Todas las variables globales y estáticas en D son subproceso local por defecto y
spawn
ysend
no permiten el envío de mensajes que contienen indirección de puntero mutable. Se puede obtener un intercambio limitado a través de lashared
palabra clave, lo que implica una verificación adicional por parte del sistema de tipos. Fuera del dialecto seguro del lenguaje, puede forzar las variables globales / compartidas clásicas de estilo C / Java utilizando la__gshared
palabra clave, pero todas las apuestas están desactivadas en lo que respecta a la seguridad de la carrera. Este modelo se detalla en un capítulo gratuito del libro de Andrei Alexandresu "El lenguaje de programación D".std.parallelism es menos seguro pero, en algunos aspectos, más flexible que std.concurrency y está orientado específicamente a datos multinúcleo y paralelismo de tareas para aumentar el rendimiento del procesamiento de datos en lugar de la concurrencia de casos generales. Cuenta con un bucle foreach paralelo, llamadas de función asincrónicas, reducciones paralelas, etc. Proporciona mecanismos para facilitar la escritura de código seguro para la carrera, pero hacerlo aún requiere cierto grado de disciplina.
Una discusión más exhaustiva sobre los dos paradigmas principales de subprocesos múltiples en D se puede encontrar en mi artículo reciente sobre el tema.
fuente
Te sugiero que vayas y eches un vistazo a Clojure
El enfoque de la concurrencia es muy novedoso y, en mi opinión, un avance significativo en lo que se ve en Java y en la mayoría de los otros lenguajes. Algunos puntos clave:
Sugeriría ver este video como introducción
fuente
Eche un vistazo al lenguaje Scala, que extiende Java y se ejecuta en la JVM. Toma prestada la noción de "Actores" de Erlang, y brinda una buena capacidad para manejar fallas de concurrencia.
fuente
Si desea llevarlo a un nivel completamente nuevo, es posible que desee estudiar la programación con CUDA .
Esto le permite distribuir sus algoritmos en cientos de núcleos de procesamiento en su tarjeta gráfica en lugar de los pocos núcleos principales de la CPU. Incluso hay enlaces de idioma que aparentemente hacen que sea relativamente fácil acelerar lenguajes de alto nivel como python usando técnicas GPGPU .
fuente
La concurrencia de programación en la JVM: sincronización de masterización, STM y actores discute la programación concurrente en Scala, Clojure, JRuby y Groovy.
Obtendrá una comprensión bastante sólida de los diferentes enfoques para la concurrencia.
¿Donde está tu sonrisa?
fuente