Todo lo que siempre quisiste saber sobre las variables globa

Artículos de interés para la comunidad de Velneo 6x
Avatar de Usuario
velneo
vAdmin
vAdmin
Mensajes: 245
Registrado: 09 Sep 2005, 08:55

Todo lo que siempre quisiste saber sobre las variables globa

Mensaje por velneo » 12 Abr 2012, 12:24

Como desarrollador de Velneo ya sabes que hay varios tipos de variable global:

- En disco.
- En disco (por grupo de usuarios).
- En memoria (independiente por cada tarea en 2º plano).
- En memoria (compartida por todas las tareas).

La toma de decisión de qué tipo de variable global usar depende, obviamente, del uso al que vaya a ser destinada. En la mayoría de los casos la decisión es sencilla pero cuando vamos usarla en procesos o tareas que puedan hacer uso de la misma de forma simultánea tanto en local como en el servidor, las dudas se multiplican. En este artículo te explicaré las implicaciones que tiene cada tipo para que no tengas ninguna duda con respecto a las variables globales en el futuro.

Persistencia

Comencemos por lo más sencillo: Diferencias entre la persistencia en disco y en memoria.

Una variable global en disco podría compararse con una tabla de un único registro y un único campo. Es un dato almacenado en disco y cuyo contenido es común a los usuarios de la aplicación.

Una variable en memoria es local a cada usuario que ejecute la aplicación y su valor desaparece una vez el usuario cierre la aplicación. La variable, al ser de carácter local, podrá tener un valor diferente por cada usuario que ejecute la aplicación. Más adelante explicaré cómo afectan los distintos planos de ejecución al comportamiento de las mismas.

En lo que se refiere a las variables globales en disco, tal y como acabo de decir, su valor es común a todos los usuarios que ejecuten la aplicación; si un usuario modifica su contenido afectará al resto de los usuarios. La opción Por grupo de usuarios da la posibilidad de que el contenido de la variable global sea diferente según el grupo al que pertenezca el usuario. Es decir, cada grupo de usuarios podrá establecer en la misma variable global un valor diferente al del resto de los grupos. Cuando hablo de “grupo de usuarios” no me refiero a los grupos de usuarios que podemos declarar en un vServer para clasificarlos, sino a un parámetro, de tipo numérico, que se establece a asignar a un usuario permisos en una aplicación, que podéis ver en la captura de pantalla siguiente:

En ese parámetro simplemente tendremos que indicar un número mayor que 0. Así por ejemplo, si queremos distinguir tres grupos diferentes, podremos establecer el grupo 1 a todos los usuarios de un grupo, el 2 para los de otro y así sucesivamente.

Variables globales en memoria y planos de ejecución

En cuanto a las variables globales con persistencia en memoria, el declarar una como independiente por cada tarea en 2º plano o compartida por todas las tareas determinará su comportamiento cuando más de un proceso que haga uso de la misma se ejecute de forma simultánea. Es decir, esta distinción afectará al comportamiento de la variable global en procesos ejecutados en el cliente en multi-tarea (procesos en 2º plano) y en procesos ejecutados en el servidor (procesos en 3er plano).

Una variable global en memoria común para todas las tareas implicará que si en una misma máquina se ejecuta simultáneamente varios procesos, si en uno de ellos cambiamos su valor, éste cambio será tenido en cuenta en el resto de los procesos. Una variable independiente por cada tarea en 2º plano por el contrario, hará que, cuando el proceso sea ejecutado, éste trabaje con una copia de la misma, de forma que las modificaciones realizadas en uno, no afectarán al resto; cada tarea mantendrá de forma independiente su propio valor de la variable.

Añadir que, aunque una variable global tenga persistencia en memoria, si desde un cliente se lanza un proceso para su ejecución en el servidor, éste trabajará con el valor que tenía la variable en el cliente al lanzar el proceso y, si se hace algún cambio sobre la misma en el proceso ejecutado en el servidor, se lo retornará al cliente.

En el esquema siguiente se muestra de forma gráfica el comportamiento de las variables globales en memoria, según sean compartidas por todas las tareas o no, cuando son usadas por diferentes tareas concurrentes.

Responder