Mientras voy pensando en las cosas que voy a cambiar cuando porte mi motor a C++, se me ocurre que quizás pueda hacer uso de múltiples hilos de ejecución. Ahora mismo, el motor es una capa por encima de un número de módulos (gráficos, sonido, entrada/salida, etc.), así que podría utilizar un hilo para cada uno.
Además, podría establecer que se durmiesen cada cierto tiempo, justo el tiempo que tenga que pasar para que el módulo necesite refrescar los datos. Así reduciría el uso de la CPU (imagino) aunque si el sistema tiene unos framerates bajísimos, podría dar mal resultado.
También está el tema de que depurar hilos es una tarea mucho más costosa que una ejecución secuencial típica, aunque aquí tendría un número reducido de hilos y siempre sería el mismo. Quizás podría separar cada librería en una DLL y cargar así poder depurarla por separado antes de integrarlo todo y hacelo multihilo.
Muchas soluciones, y mi conocimiento en la materia es bastante escaso, así que todo se reducirá a probar. ¿Qué opináis?
- 20 de Junio de 2007 a las 12:43 am
KnudoW dice:
Yo “opino” que no tengo ni idea… esto lo empezaste estando en la superior o antes? xD
Miguel Herrero dice:
En la superior
, pero llevo tiempo sin tocarlo… casi casi desde que sacaron el XNA. Pero en cuanto terminen los exámenes y tras un par de días de parranda videojueguil quiero ponerlo al día otra vez.El tema es poder aprovechar a mejorar ciertas cosas de la arquitectura base, ya que tengo que volver a escribir el código.
Lo principal es no utilizar la CPU al 100 todo el rato, básicamente por andar comprobando si tengo que actualizar tal o cual módulo todo el rato.
Guti dice:
Yo no sabría qué opinar, sin conocer lo suficiente el motor… Tampoco sé sopesar la necesidad (o la utilidad) de que sea multihilo. ¿Qué ventajas tendría?
Miguel Herrero dice:
Supongamos que el módulo de gráficos se actualiza a 30 fps (fotogramas por segundo) y el de sonido a 15. Podría dormir el hilo encargado del sonido el tiempo suficiente hasta que se necesite volver a “refrescar” la información.
Así, la CPU no estará constantemente al 100%. También podría poner contadores y hacer la aplicación monohilo. Pero ahora con los procesadores de varios núcleos supongo que conviene que los aproveche haciendo aplicaciones multihilo.
Guti dice:
Vale, es que no sabía cómo se estructuraba un programa de estos. Si tienes un bucle de actualización, supongo que sí es buena idea dormirlo el tiempo correspondiente (aunque fuese un solo bucle que actualizara diversas cosas con contadores).
Como bien dices, depurarlo si uno no va por partes y haciéndolo todo bien puede ser complicadillo
Suerte.

