Prioridad en el Programador de tareas de Windows

Cualquiera que ejecute trabajos en el Programador de Tareas de Windows tarde o temprano se encontrará con diferencias inexplicables en el tiempo de ejecución. Un script PHP que tarda 5 minutos en ejecutarse en la línea de comandos, de repente tarda 20 minutos al ejecutarse mediante el Programador de Tareas de Windows. Mismo usuario, mismos permisos, mismo código: cuatro veces más tiempo de ejecución. ¿Qué estaba pasando?


Tras horas de depuración, sesiones del Monitor de Procesos e innumerables comparaciones de configuración, la solución fue sorprendentemente sencilla: el Programador 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 se esperaba. Esta diferencia, aparentemente pequeña, puede provocar una degradación significativa del rendimiento en operaciones con uso intensivo de E/S.

Los niveles de prioridad de Windows en detalle son:

ValorPrioridadDescripción
0Tiempo realMáxima prioridad (¡precaución!)
1AltoAlta prioridad
2-3Por encima de lo normalAcerca de Normal
4-6NormalEstándar para procesos interactivos
7Por debajo de lo normalPREDETERMINADO en el Programador de tareas
8-9Por debajo de lo normalAún más abajo
10InactivoPrioridad más baja

El problema con la prioridad en la programación de tareas tiene múltiples capas: cuando exporta una tarea y mira el XML, a menudo... 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 Normalmente, mi script PHP se ejecutaba de nuevo en los 300 segundos previstos. Si has configurado tareas con una cuenta de usuario específica, también puedes especificarla fácilmente en la línea 10, como se indica a continuación.:

38b7fa6c77dc344401485cd338ea4128

Atrás