4D v16.3Procesos 4D apropiativos |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
Procesos 4D apropiativos
Procesos 4D apropiativos
4D Developer Edition 64 bits para OS X ( así como para Windows a partir de 4D v16 R2) ofrecen una poderosa funcionalidad: la posibilidad de ejecutar código 4D en un proceso apropiativo. Gracias a esta nueva funcionalidad, sus aplicaciones 4D compiladas podrán sacar el máximo provecho de los ordenadores de varios núcleos de modo que su ejecución será más rápida y puede soportar más usuarios conectados. Cuando se ejecuta en modo apropiativo, un proceso está dedicado a una CPU. La gestión de procesos luego se delega al sistema, que puede adjudicar por separado cada CPU en una máquina multi-núcleo. Cuando se ejecuta en modo cooperativo (el único modo disponible en 4D hasta 4D v15 R5), todos los procesos son gestionados por el hilo de la aplicación padre y comparten la misma CPU, incluso en una máquina multi-núcleo. Como resultado, en el modo apropiativo, el rendimiento global de la aplicación se incrementa, sobre todo en máquinas multi-núcleo, ya que múltiples procesos (hilos) se pueden ejecutar simultáneamente. Sin embargo, las ganancias reales dependen de las operaciones ejecutadas. En contraparte, ya que en el modo apropiativo cada hilo es independiente de los demás y no es gestionado directamente por la aplicación, limitaciones específicas se aplican a los métodos que usted desea que sean compatibles con el modo apropiativo. Además, la ejecución apropiativa está disponible sólo en algunos contextos específicos. El uso del modo apropiativo está disponible versiones 4D 64 bits únicamente. Los siguientes contextos de ejecución son actualmente soportados:
Si el contexto de ejecución soporta el modo apropiativo y si el método es "hilo de seguro", un proceso 4D lanzado utilizando los comandos New process o CALL WORKER, o vía el comando de menú "Ejecutar método" se ejecutará en modo apropiativo. De lo contrario, si llama New process o CALL WORKER desde un contexto de ejecución que no es soportado (por ejemplo en una máquina 4D remota), el proceso es siempre cooperativo.Nota: puede ejecutar un proceso en modo apropiativo desde un 4D remoto iniciando un procedimiento almacenado en el servidor con el lenguaje, por ejemplo, con Execute on server. El código 4D se puede ejecutar en hilo apropiativo sólo cuando se cumplen algunas condiciones específicas. Cada parte del código ejecutado (comandos, métodos, variables...) debe ser compatible con una ejecución apropiativa. Los elementos que se pueden ejecutar en hilos apropiativos se llaman hilos seguros y los elementos que no se pueden ejecutar en hilos apropiativos se llaman hilos inseguros. Nota: dado que un hilo se maneja de forma independiente a partir del método proceso padre, toda la cadena de llamadas no debe incluir ningún código hilo inseguro, de lo contrario la ejecución apropiativa no será posible. Este punto se discute en el párrafo ¿Cuando un proceso se inicia apropiativamente?. La propiedad "seguridad de hilo" de cada elemento depende del elemento en sí:
Básicamente, el código que se ejecuta en hilos apropiativos no puede llamar a las partes con las interacciones externas, tal como el código plug-in o las variables interproceso. Los accesos a los datos, sin embargo, son permitidos desde el servidor de datos 4D que soporta la ejecución apropiativa. Por defecto, 4D ejecuta todos los métodos de proyecto de su aplicación en modo cooperativo. Si desea beneficiarse de la funcionalidad modo apropiativo, el primer paso consiste en declarar explícitamente todos los métodos que desea que se inicien en modo apropiativo siempre que sea posible, es decir, los métodos que considere capaz de ejecutar en proceso apropiativo. El compilador comprobará que estos métodos sean en realidad hilo seguro (ver Escribir un método hilo seguro para más información). También puede inhabilitar el modo apropiativo para algunos métodos, si es necesario. Tenga en cuenta que la definir un método como apropiativo hace que sea elegible para ejecución apropiativa, pero no garantiza que se ejecute realmente en modo apropiativo. Iniciar un proceso en modo apropiativo resulta de una evaluación realizada por 4D respecto a las propiedades de todos los métodos en la cadena de llamadas del proceso (para más información, consulte el párrafo ¿Cuando un proceso se inicia apropiativamente?. Para declarar su método de elegibilidad para el modo apropiativo, es necesario utilizar la opción de declaración Modo de ejecución en el cuadro de diálogo Propiedades del método: Están disponibles las siguientes opciones:
Nota: un método de componentes declarados como "Compartido con componentes y bases locales" también debe ser declarado "capaz" con el fin de que pueda correr en un hilo apropiativo por la base local. Al exportar el código del método utilizando, por ejemplo METHOD GET CODE, la propiedad "apropiativa" se exporta en el comentario atributo con valor "auto", "seguro", o "inseguro". Los comandos METHOD GET ATTRIBUTES y METHOD SET ATTRIBUTES también obtienen o establecen el atributo "apropiativo" con valor "auto", "seguro", o "inseguro". La siguiente tabla resume los efectos de las opciones de declaración del modo apropiativo:
Recordatorio: la ejecución apropiativa sólo está disponible en modo compilado. En modo compilado, cuando se inicia un proceso creado por los métodos New process o CALL WORKER, 4D lee la propiedad apropiativa del método proceso (también llamado método padre) y ejecuta el proceso en modo apropiativo o cooperativo, en función de esta propiedad:
La propiedad seguridad de hilo depende de la cadena de llamadas. Si un método con la propiedad declarada "capaz" llama a un método hilo inseguro en cualquiera de sus subniveles, se devolverá un error de compilación: si un método único en toda la cadena de llamadas es hilo inseguro, "contaminará" todos los otros métodos y la ejecución apropiativa será rechazada por el compilador. Un hilo apropiativo sólo puede crearse cuando toda la cadena es hilo seguro y el método de proceso ha sido declarado "Se puede ejecutar en proceso apropiativo". Por ejemplo, considere los siguientes métodos de proyecto: //Método proyecto MyDialog //Método proyecto MyComp //Método proyecto CallDial //Método proyecto CallComp La ejecución de un método en el modo apropiativo dependerá de que la propiedad "ejecución" y de la cadena de llamadas. La siguiente tabla ilustra estas diversas situaciones:
4D le permite identificar la ejecución de procesos en modo compilado:
Para ser hilo seguro, un método debe respetar las siguientes reglas:
Nota: en el caso de un método "Compartido por componentes y bases locales", la propiedad "Se puede ejecutar en procesos apropiativos" debe ser seleccionada. (*) Los procesos worker, permiten el intercambio de datos entre todos los procesos, incluyendo los procesos apropiativos. Para más información, consulte el Sobre workers. Los métodos con la propiedad "Se puede ejecutar en procesos apropiativos" serán verificados por 4D en el paso de compilación. Un error de compilación se emite cuando el compilador encuentra algo que le impide ser hilo seguro: El archivo de símbolos, si está habilitado, también contiene el estado de hilo de seguridad para cada método: Ya que son accesos "externos", las llamadas a objetos de interfaz de usuario, tales como formularios, así como también al Depurador no están permitidas en hilos apropiativos. Los únicos accesos posibles a la interfaz de usuario de un hilo apropiativo son:
Un número significativo de comandos 4D son hilo seguro. En la documentación, la imagen en el área de propiedad del comando indica que el comando es hilo seguro. Puede obtener la lista de comandos hilo seguro en el manual Referencia del lenguaje. También puede utilizar Command name que puede devolver la propiedad hilo seguro para cada comando (ver abajo). Cuando un método utiliza un comando que puede llamar un disparador, el compilador 4D evalúa la seguridad de hilo del disparador para comprobar la seguridad de hilo del método: SAVE RECORD([Table_1]) //dispara en Table_1, si existe, debe ser hilo seguro Esta es la lista de comandos que se verifican en el momento de la compilación para la seguridad de hilo de los disparadores:
Si la tabla se pasa dinamicamente, el compilador puede algunas veces no encontrar que trigger evaluar. Estos son algunos ejemplos de cada situación: DEFAULT TABLE([Table_1]) En este caso, todos los triggers son seleccionados.Si se detecta un comando hilo inseguro en al menos un trigger, todo el grupo se rechaza y el método se declara hilo inseguro. Los métodos de captura de errores instalados por el comando ON ERR CALL deben ser hilo seguro si es probable que sean llamados desde un proceso apropiativo. Con el fin de manejar este caso, el compilador verifica la propiedad de seguridad de hilo de los métodos de proyecto de captura de errores pasados al comando ON ERR CALL durante la compilación y devuelve los errores correspondientes si no cumplen con la ejecución apropiativa.. Tenga en cuenta que esta comprobación sólo es posible cuando el nombre del método se pasa como una constante, y no se calcula, como se muestra a continuación: ON ERR CALL("myErrMethod1") //será verificado por el compilador Además, a partir de 4D v15 R5, si un método de proyecto de captura de errores no se puede llamar en tiempo de ejecución (luego de un problema de seguridad hilo, o por cualquier razón como "método no encontrado"), se genera el nuevo error -10532 "No se puede llamar al método de proyecto de gestión de errores 'methodName'". Un proceso puede desreferenciar a un puntero para acceder al valor de otra variable proceso sólo si ambos procesos son cooperativos, de lo contrario 4D generará un error. En un proceso apropiativo, si algún código 4D intenta desreferenciar un puntero a una variable interproceso, 4D generará un error. Ejemplo con los siguientes métodos: Method1: myVar:=42 Method2: $value:=$1-> Si el proceso que ejecuta Method1 o el proceso que ejecuta Method2 es apropiativo, luego la expresión "$value:=$1->" lanzará un error de ejecución. El uso de parámetros de tipo DocRef (referencia de documento abierto, utilizado o devuelto por los comandos Open document, Create document, Append document, CLOSE DOCUMENT, RECEIVE PACKET, SEND PACKET) se limita a los siguientes contextos:
Para más información sobre la referencia DocRef, consulte la sección DocRef: número de referencia del documento.
Ver también
|
PROPIEDADES
Producto: 4D
HISTORIA
Creado por: 4D v15 R5 ARTICLE USAGE
Manual de lenguaje 4D ( 4D v16.1) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||