Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

Multi-theading en RGSS (y otras cosas)

Ver el tema anterior Ver el tema siguiente Ir abajo

Multi-theading en RGSS (y otras cosas)

Mensaje por orochii el 2012-12-23, 08:04

Pues bueno, de casualidad me puse a buscar sobre algo que había estado pensando hace poco, debido a mis problemas de lag x'D!!, que había escuchado del RMXP. Soporte nulo para procesadores multi-core (llamémosles así xD).
Y pues, buscando de manera random, llegué a un "artículo" de Zeriab, un creo que conocido scripter de los tiempos del RMXP. Específicamente éste artículo:
https://sites.google.com/site/zeriabsjunk/home/multi-threadinginrgss
Sin más preámbulos, acá una traducción, ya que me pareció interesante...

Multi-threading en RGSS
de Zeriab, traducido al español por Orochii Zouveleki

Aquí algunos pensamientos acerca del multi-threading en RGSS. Podrían ser aplicables al RGSS2, pero por otro lado podrían haber diferencias.
Asumiré que tienes conocimientos sobre lo que es multi-threading en general.
Spoiler:
Nota: Multi-threading se refiere a "descomponer" un proceso (programa, etc) en subprocesos. Eso permite asignar un subproceso a un core distinto, entre otras cosas. Windows por ejemplo ya hace una cosa parecida al multi-threading, asigna un proceso al procesador por un determinado tiempo, luego pasa al siguiente, y así, permitiendo que varios procesos se ejecuten "al mismo tiempo" (en realidad no al mismo tiempo porque es imposible).
Los multi-core en cambio, sí permiten que varios procesos se ejecuten de verdad al mismo tiempo. Porque cada core es un procesador digamos.

"Núcleo Simple" (Single Core)
Sin importar el número de "hilos" (subprocesos) que hagas, en RGSS sólo es usado un núcleo de un sólo CPU.
Creo es una limitación del intérprete Ruby en sí, aunque no estoy completamente seguro. Lo que sí parece es que el Audio corre en un proceso fuera del entorno Ruby, y por lo tanto puede ser capaz de usar otro núcleo para procesar el audio (no estoy completamente seguro de ésto).
En conclusión, no debes esperar ninguna mejora en velocidad (rendimiento) por utilizar más subprocesos (threads).

Graphic.update
Como puedes deducir del nombre, este método actualiza los gráficos. También intenta mantener el frame-rate estable. Esto significa que se detiene hasta que pase el tiempo suficiente.
El problema es que Graphic.update no sólo detiene el proceso que llama el método. Detiene TODOS los procesos. No se puede dejar de llamar Graphics.update porque obtendrás un error de "Script is hanging" (lit. "El script está colgado") después de 8-10 segundos.
Básicamente sólo puedes esperar que el rendimiento de los otros procesos disminuya significativamente.

Sprites
Los Sprites no están a salvo. Si creas sprites en un proceso, mientras en otro llamas a Graphics.update, muy posiblemente encontrarás una condición que hará al juego colgarse. Puede ser perfectamente posible proteger las llamadas a Graphics.update (creando aliases y rehaciendo las partes críticas) de manera que el método interno de Graphics.update nunca sea llamado.
Sugiero que intente tener toda creación de sprites en el mismo proceso que el Graphics.update. De esa forma no se tendrá sorpresas inesperadas, y permitirá tomar medidas de seguridad comunes al usar procesos múltiples.

Conclusion
Desde el punto de vista del rendimiento, no hay beneficio de utilizar más de un subproceso. De hecho podría más bien empeorar el rendimiento. Por lo tanto, sólo use más de un proceso si de otra forma se tornase complicado resolver el problema.
Un ejemplo de dónde podría ser útil el uso de procesos múltiples (multi-threading), es con un script de cargado o de progreso, donde un proceso se encargará de manejar los sprites y actualizar la parte gráfica (Graphics.update) lo menos posible, mientras el otro subproceso carga los datos o realiza los algoritmos necesarios.

Eso sería todo, espero mi traducción no sea tan horrible x'D,
Orochii Zouveleki
avatar
orochii
Reportero

0/3

Créditos 7762

Gracias : 456

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.