Laurent Esnault, vicepresidente de ingeniería, explica la diferencia entre los procesos cooperativos y los preventivos durante su sesión sobre el multihilo preventivo en el 4D Summit 2016. Gracias al Preemptive Multi-threading, puede tener más procesos paralelos, y así añadir más y más usuarios, ya sea para aplicaciones de escritorio o para aplicaciones web.
Si te perdiste la sesión de Laurent en el 4D Summit 2016, ¡mira este vídeo y disfruta de un entrenamiento personal del maestro del preemptive multi-threading!
Diferencia entre cooperativo y preventivo
Entonces, ¿qué es cooperativo y qué es preventivo?
El modo cooperativo es generalmente lo que usted utiliza hoy en día con sus procesos 4D. Cooperativo significa que los procesos 4D cooperan (trabajan juntos) para compartir una única CPU. A veces cooperan explícitamente, como cuando usted usa el comando IDLE, y a veces cooperan implícitamente, como cuando usted usa la mayoría de los otros comandos del lenguaje 4D. Esto se debe a que, internamente, 4D utiliza el comando IDLE para dar la CPU a otro proceso. Como consecuencia, sólo se puede utilizar un núcleo de CPU a la vez.
Por supuesto, todos ustedes conocen los procesos de 4D que están utilizando hoy en día. Y parece natural utilizar esos procesos para acceder a la interfaz de usuario. Puedes abrir una ventana, mostrar un diálogo o un formulario, etc. Pero en realidad, no es nada natural para un sistema operativo. La mayoría de los sistemas operativos prohíben el acceso a la interfaz de usuario desde cualquier hilo que no sea el hilo principal. Pero para los procesos cooperativos, 4D gestiona internamente el acceso a la interfaz de usuario… incluso en un hilo secundario.
En el modo preventivo, no es necesario llamar al comando IDLE, porque los procesos 4D no necesitan cooperar para compartir la CPU: lo hace el sistema operativo. El sistema operativo da la CPU de forma preventiva a un hilo u otro. Así que si tienes varias CPUs en tu máquina, entonces varios hilos pueden ser ejecutados al mismo tiempo. Por lo tanto, el beneficio es que puedes utilizar todos los núcleos de tu máquina. Pero desde un hilo preventivo, no puedes acceder a la interfaz de usuario.
Puedes ver cómo en el modo cooperativo, los procesos se ejecutan secuencialmente, uno tras otro y utilizando sólo una CPU mientras que en el modo preventivo, el sistema operativo despacha los dos procesos en todas las CPUs (en el ejemplo mostrado, tanto la CPU 1 como la CPU 2).
La ventaja es evidente. El tiempo de ejecución global es más corto en modo preventivo cuando se tienen dos CPUs. Aunque el tiempo de ejecución de cada proceso individual sea el mismo. La programación preventiva no resulta en una ganancia de rendimiento en el tiempo de ejecución de un proceso. Es el tiempo de ejecución global de múltiples tareas, que se ejecutan en múltiples procesos, el que se reducirá.
Demostración
He aquí una demostración muy sencilla. Cada botón crea cuatro procesos individuales.
El primer botón crea cuatro procesos cooperativos para hacer algunos cálculos sin sentido (estrictamente para la demostración). El tiempo de ejecución global es de 643 ticks y el tiempo de ejecución de cada proceso individual es de unos 150 ticks. Así que, básicamente, el tiempo de ejecución global es la suma de los cuatro tiempos de ejecución individuales.
Si hacemos exactamente el mismo cálculo en cuatro hilos preventivos, verás que el tiempo de ejecución de los procesos individuales es aproximadamente el mismo (150 ticks) sin embargo, el tiempo de ejecución global es CUATRO VECES más corto.
Descubre la base de datos de ejemplo utilizada para la demostración y las explicaciones complementarias en el post de Vanessa sobre los procesos preventivos.