tutorialspoint threads threading thread multithread multi manage implement multithreading design oop

multithreading - threads - ¿Cómo se diseña una simulación del mundo real?



multi threading java (5)

@Cody Brocious

Este CodeProject usa Linq para demostrar esta práctica. (Linq a la vida)

Estoy fascinado por el rendimiento de aplicaciones como "Rollercoaster Tycoon" y "The Sims" y juegos de FPS. Me gustaría saber más sobre la arquitectura básica de la aplicación. (No estoy tan preocupado con la interfaz de usuario, supongo que los pirípticos MVC / MVP se aplican aquí. Tampoco me preocupan las matemáticas y la física en este punto).

Mi pregunta principal trata de las decenas o cientos de objetos individuales en la simulación (personas, vehículos, elementos, etc.) que se mueven, toman decisiones y plantean y responden a eventos, pareciendo todos al mismo tiempo y cómo son. diseñado para tan buen rendimiento.

P: Principalmente, ¿estos objetos se procesan en un bucle gigante, uno a la vez, o cada objeto procesa en su propio hilo ? ¿Cuántos hilos son prácticos en una simulación como esta? (Figura de Ballpark por supuesto, 10, 100, 1000)

No estoy buscando escribir un juego, solo quiero la teoría del diseño porque me pregunto si ese diseño puede aplicarse a otras aplicaciones donde se toman varias decisiones aparentemente al mismo tiempo.


Además de las sugerencias publicadas, recomendaría explorar la etiqueta de simulación en sourceforge. Hay una variedad de proyectos de simulación en diferentes niveles de complejidad.

Sourceforge

También recomiendo el siguiente libro para una visión general básica, mientras que se centra en la física se trata de cuestiones de simulación.

Física para desarrolladores de juegos


Hasta hace muy poco, la lógica y la administración del juego estaban en un solo hilo en una gran máquina de estados finitos. Ahora, sin embargo, tiende a ver las diferentes piezas del juego (audio, gráficos, física, lógica de "simulación", etc.) divididas en sus propias FSM en hilos.

Edit: Por cierto, los hilos son una muy mala manera de tener las cosas en una simulación que ocurre al mismo tiempo, esto conduce a condiciones de carrera. Es común que cuando desee que las cosas sucedan al mismo tiempo, simplemente adivine lo que debe suceder al iterar sobre sus datos y almacenarlos por separado, y luego aplicarlos una vez que se hayan procesado todos los datos. Rince, repite.


Hay dos formas básicas de hacer este tipo de simulación basada en el agente y la dinámica del sistema . En la simulación basada en agente y cada entidad en el juego estaría representada por una instancia de una clase con propiedades y comportamientos, todas las interacciones entre las entidades tendrían que definirse explícitamente y cuando desee que estas entidades interactúen, una función recibe el nombre de propiedades de las entidades que interactúan se cambia.

La dinámica del sistema es completamente diferente, solo trata con sumas y totales, no hay representación de una sola entidad en el sistema. El ejemplo más fácil de eso es el modelo Predator and Prey.

Ambas tienen ventajas y desventajas, el enfoque de Dinámica del Sistema se adapta mejor a un gran número de entidades, manteniendo el tiempo de ejecución corto. Si bien hay varias fórmulas que debe calcular, el tiempo para calcular es independiente de los valores de la fórmula. Pero no hay forma de ver una entidad individual en este enfoque. El enfoque basado en agentes le permite colocar entidades en ubicaciones específicas y le permite interactuar con entidades específicas en su simulación.

Los FSM y los autómatas Celular son otras maneras de simular sistemas en un juego. Por ejemplo, en el enfoque basado en agentes, puede modelar el comportamiento de un agente con un FSM. Simcity usó los autómatas Celular para hacer parte del trabajo de simulación.

En general, probablemente no tengas un gran modelo que haga todo menos sistemas múltiples que realicen tareas específicas, algunos de estos no necesitarán ser actualizados muy a menudo, por ejemplo, algo que determine el clima, otros pueden necesitar actualizaciones constantes. Incluso si los coloca en hilos separados, querrá pausarlos o iniciarlos cuando los necesite. Es posible que desee dividir el trabajo en varios marcos, por ejemplo, calcular solo las actualizaciones de una cierta cantidad de agentes.


El código fuente del Simcity original ha sido abierto como Micropolis . Puede ser un estudio interesante.