Creo que su empresa no debería estar usando subprocesos múltiples.
Después de hacer un proyecto multiproceso masivo, descubrí que dos técnicas eran críticas para hacer que las cosas funcionen. Primero , el código tenía que estar escrito correctamente. Todos los campos tenían que verificarse manualmente para asegurarse de que se declararan correctamente y que se sincronizaran correctamente donde se haga referencia. (Advertencia: estoy simplificando un poco las cosas aquí para que mi respuesta sea corta, o en cualquier caso, más corta). En segundo lugar , el código tuvo que probarse ejecutándolo en máquinas simples y multinúcleo, muchos minutos usando 100% de cada núcleo. (Y si solo usa el 2% de cada núcleo, como solía hacerlo para mí, también es un error).
Es posible que pueda administrar esto, pero su organización no puede. Incluso si entendieron el problema, que no lo hacen, no tienen la experiencia.
La mayoría de los idiomas proporcionan formas de evitar esto. Si tiene un lector de socket, que generalmente tiene su propio hilo, haga que obtenga la información en el hilo principal de la forma más rápida y sencilla posible. Mejor aún, busque las clases / funciones del sistema que manejarán la parte del hilo de la lectura por usted. Use una cola que ejecute "eventos" uno tras otro, como lo hacen la mayoría de las API de GUI. (Utilice la cola de eventos de la API GUI en sí misma). Si necesita un procesamiento paralelo, probablemente pueda encontrar algún tipo de "subproceso de trabajo" que le permita mantener datos / campos en un solo subproceso, manejando todas las transferencias por usted.
Haga hincapié en todos los peligros del subprocesamiento múltiple. (Historias de miedo: mi error favorito involucraba un par de líneas como:, lo int i = 5; i = i * i;
que resultó en i
un valor de 35. Una que vi mucho fue:if (thing != null) thing.reset();
lanzar una excepción de puntero nulo). Creo que su única esperanza es hacerles entender que son entrando en un mundo nuevo, nuevo y extraño, y que tal vez deberían dar un gran paso atrás.
No estoy muy seguro de cómo se debe manejar el subprocesamiento múltiple. Si el trabajo se puede dar a una persona, y todo lo que hacen se tira si fallan, está bien. Pero un equipo solo será tan fuerte como su miembro más débil, e incluso un buen programador tendrá problemas con el subprocesamiento múltiple completo. Espero que la gente del idioma encuentre la manera de hacerlo seguro. He visto algún software útil por ahí. Pero creo que es mejor evitar el subprocesamiento múltiple a menos que el tiempo de ejecución sea crítico y haya un buen programador o un equipo probado disponible.