Cualquiera que ejecute trabajos en el programador de tareas de Windows tarde o temprano tropezará con diferencias inexplicables en el tiempo de ejecución. Un script PHP que se ejecuta en 5 minutos en la línea de comandos de repente tarda 20 minutos cuando se ejecuta a través del Programador de tareas de Windows. Mismo usuario, mismos derechos, mismo código: cuatro veces el tiempo de ejecución. ¿Qué estaba pasando allí?
Fuera de horas Depuración, Sesiones de monitorización de procesos e innumerables comparaciones de configuración, la solución fue sorprendentemente simple: la programación de tareas de Windows establece una prioridad de proceso más baja de forma predeterminada. El valor predeterminado para las tareas en el Programador de tareas es 7 (Por debajo de lo normal), no 4-6 (Normal), como era de esperar. Esta diferencia aparentemente pequeña puede provocar pérdidas masivas de rendimiento en operaciones con uso intensivo de E/S.
Los niveles de prioridad de Windows en detalle son:
| Valor | Prioridad | Descripción |
|---|---|---|
| 0 | Tiempo real | Máxima prioridad (¡precaución!) |
| 1 | Alto | Alta prioridad |
| 2-3 | Por encima de lo normal | Acerca de Normal |
| 4-6 | Normal | Estándar para procesos interactivos |
| 7 | Por debajo de lo normal | PREDETERMINADO en el Programador de tareas |
| 8-9 | Por debajo de lo normal | Aún más abajo |
| 10 | Inactivo | Prioridad más baja |
El problema de la prioridad en la programación de tareas es multifacético: cuando exportas una tarea y miras el XML, a menudo encontrarás No Configuración de prioridad. Windows usará entonces el valor predeterminado de forma silenciosa. 7. La GUI muestra este valor durante la exportación, pero no se almacena explícitamente en la tarea. La prioridad más baja no solo reduce el tiempo de CPU, sino que también...:
- Operaciones de E/S de disco limitadas
- Prioridad de red más baja
- Almacenamiento en caché deficiente del sistema de archivos
- Retrasos en el acceso a la base de datos
Incluso si usa el mismo usuario y activa "Ejecutar con los máximos privilegios", la tarea se ejecuta en una estación o escritorio de Windows diferente con diferentes prioridades. Para identificar el problema, puede usar PowerShell para mostrar todas las tareas con sus prioridades reales.:
38b7fa6c77dc344401485cd338ea4128
Casi todas mis tareas se ejecutaron con prioridad 7. Ahora corregimos específicamente la prioridad de varias tareas a la vez:
38b7fa6c77dc344401485cd338ea4128
Después de establecer la prioridad a 4 Mi script PHP se ejecutó (normalmente) nuevamente en los 300 segundos esperados. Si ha configurado tareas con una cuenta de usuario específica, simplemente puede ingresar esto en la línea 10 de la siguiente manera:
38b7fa6c77dc344401485cd338ea4128