¿Qué lecciones aprendiste de un proyecto que casi / realmente fracasó debido a un mal subproceso múltiple?
A veces, el marco impone un cierto modelo de subprocesos que hace que las cosas en un orden de magnitud sean más difíciles de corregir.
En cuanto a mí, aún no me he recuperado del último fracaso y creo que es mejor para mí no trabajar en nada que tenga que ver con el subprocesamiento múltiple en ese marco.
Descubrí que era bueno en problemas de subprocesos múltiples que tienen una bifurcación / unión simple, y donde los datos solo viajan en una dirección (mientras que las señales pueden viajar en una dirección circular).
No puedo manejar la GUI en la que parte del trabajo solo se puede realizar en un subproceso estrictamente serializado (el "subproceso principal") y otro trabajo solo se puede realizar en cualquier subproceso que no sea el subproceso principal (los "subprocesos de trabajo") y donde los datos y los mensajes tienen que viajar en todas las direcciones entre N componentes (un gráfico completamente conectado).
En el momento en que dejé ese proyecto por otro, había problemas de punto muerto en todas partes. Escuché que 2-3 meses después, varios otros desarrolladores lograron solucionar todos los problemas de punto muerto, hasta el punto de que se pueden enviar a los clientes. Nunca logré descubrir ese conocimiento faltante que me falta.
Algo sobre el proyecto: el número de ID de mensajes (valores enteros que describen el significado de un evento que se puede enviar a la cola de mensajes de otro objeto, independientemente de la secuencia) se encuentra en varios miles. Las cadenas únicas (mensajes de usuario) también se encuentran en aproximadamente mil.
Adicional
La mejor analogía que obtuve de otro equipo (no relacionado con mis proyectos pasados o presentes) fue "poner los datos en una base de datos". ("Base de datos" que se refiere a centralización y actualizaciones atómicas). En una GUI que está fragmentada en múltiples vistas, todas se ejecutan en el mismo "hilo principal" y todo el trabajo pesado no GUI se realiza en hilos de trabajo individuales, los datos de la aplicación deben almacenarse en una sola placa que actúa como una base de datos y dejar que la "base de datos" maneje todas las "actualizaciones atómicas" que involucran dependencias de datos no triviales. Todas las otras partes de la GUI solo manejan el dibujo de la pantalla y nada más. Las partes de la interfaz de usuario podrían almacenar cosas en caché y el usuario no se dará cuenta si está obsoleto por una fracción de segundo, si está diseñado correctamente. Esta "base de datos" también se conoce como "el documento" en la arquitectura de vista de documento. Desafortunadamente, no, mi aplicación realmente almacena todos los datos en las Vistas. No sé por qué fue así.
Compañeros contribuyentes:
(los contribuyentes no necesitan usar ejemplos reales / personales. Las lecciones de ejemplos anecdóticos, si usted lo considera creíble, también son bienvenidas).