example multithreading design-patterns multitasking design-principles

multithreading - example - Patrones de diseño para multiproceso



python multiprocessing example (2)

La multitarea parece ser un desastre en momentos en que los grandes proyectos se bloquean debido a la mutación compartida. Diría que varios subprocesos acceden a los recursos compartidos. Se vuelve muy difícil depurar y rastrear el origen del error y lo que lo está causando. Me hizo preguntar, ¿hay algún patrón de diseño que pueda usarse al diseñar programas de multithreaded ?

Realmente apreciaría sus opiniones y comentarios sobre esto y si alguien pudiera presentar buenas prácticas de diseño que puedan seguirse para garantizar la seguridad de nuestro programa, será una gran ayuda.


El enlace @WYSIWYG parece tener una gran cantidad de patrones útiles, pero puedo darle algunas pautas a seguir. La principal fuente de problemas con los programas Multi-Threaded son las Operaciones de Actualización o la Modificación Concurrente y algunos de los problemas que ocurren con menos frecuencia son la inanición, los puntos muertos, etc., que son más letales, si puedo decirlo, por lo que para evitar estas situaciones puede:

  • Utilice el patrón de objeto inmutable ; si un objeto no puede modificarse después de la creación, no puede tener actualizaciones descoordinadas y, como sabemos, la JVM garantiza que la operación de creación en sí es atómica en su caso.
  • Comando Principio de segregación de consultas : es un código separado que modifica el objeto a partir del código que los lee porque la lectura puede suceder simultáneamente, pero la modificación no puede.
  • Aproveche al máximo el lenguaje y las características de la biblioteca que está utilizando, como listas concurrentes y estructuras de subprocesamiento, ya que están bien diseñadas y tienen un buen rendimiento.
  • Hay un libro (aunque antiguo) pero con muy buenos diseños para tales sistemas, se llama Programación Concurrente en Java .

Los patrones de diseño se utilizan para resolver un problema específico. Si desea evitar los puntos muertos y aumentar la depuración, hay algunas cosas que hacer y donts

  1. Biblioteca segura para subprocesos del usuario. .Net java, C ++ tienen sus propias bibliotecas seguras para subprocesos. Usalos, usalos a ellos. No intentes crear tus propias estructuras de datos.

  2. Si está utilizando .Net, intente la tarea en lugar de subprocesos. Son más lógicos y seguros.

Es posible que desee ver la lista de algunos patrones relacionados con la concurrencia

http://www.cs.wustl.edu/~schmidt/patterns-ace.html