Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se proporciona información sobre los informes de cronología en la vista Subprocesos del Visualizador de Concurrencia.
Tiempo de ejecución (Vista Subprocesos)
Estos segmentos de la escala de tiempo de la vista Subprocesos representan el tiempo de ejecución, cuando el subproceso está trabajando activamente en un núcleo lógico del sistema.
Los cambios en el estado del subproceso se detectan a través de eventos de cambio de contexto del kernel. El seguimiento de eventos para Windows (ETW) captura pilas de ejemplo cada milisegundos. En un segmento verde muy corto, es posible que no se tome ninguna muestra. Por lo tanto, algunos segmentos de ejecución cortos pueden no mostrar ninguna pila de llamadas.
Al hacer clic en un segmento de ejecución, el Visualizador de Concurrencia muestra la pila de muestras más cercana a la ubicación del clic. La ubicación de esa pila de ejemplo se muestra mediante una flecha negra, o un símbolo de intercalación, encima de la línea de tiempo, y la pila de ejemplo aparece en la pestaña Actual.
Para ver un perfil de muestreo tradicional para todos los segmentos de ejecución en la vista actual, haga clic en Ejecución en el perfil de escala de tiempo visible.
Tiempo de E/S (Vista de Subprocesos)
Estos segmentos de la escala de tiempo están asociados a tiempos de bloqueo que se clasifican como E/S. Esto significa que un subproceso está esperando a que finalice una operación de E/S. Puede que el subproceso haya sido bloqueado en una API o por una espera del kernel relacionada con E/S, que el visualizador de concurrencia está considerando como E/S. Las API como CreateFile(), ReadFile()y WSARecv() se dividen en este grupo.
Tiempo de administración de memoria
Estos segmentos de la escala de tiempo están asociados a tiempos de bloqueo que se clasifican como Administración de memoria. Este escenario implica que un subproceso está bloqueado por un evento asociado a una operación de administración de memoria, como paginación. Durante este tiempo, se ha bloqueado un subproceso en un estado de una API o del kernel que el Concurrency Visualizer cuenta como administración de memoria. Estos incluyen eventos como la paginación y la asignación de memoria.
Examine las pilas de llamadas asociadas y los informes de perfil para comprender mejor los motivos subyacentes de los bloques que se clasifican como Administración de memoria.
Tiempo de preempción
Estos segmentos de la escala de tiempo están asociados al tiempo de bloqueo que se clasifica como Preemptivo. Esta categoría implica que un hilo se cambia debido a uno de estos motivos:
El planificador lo reemplazó mediante un subproceso de prioridad más alta.
El quantum de ejecución del subproceso expiró y otros subprocesos estaban listos para ejecutarse.
Durante este tiempo, un hilo se ha bloqueado por un motivo de espera del kernel que el Concurrency Visualizer cuenta como preempción. Los segmentos de adelantamiento se inician cuando se inserta un subproceso fuera de un núcleo lógico y terminan cuando ese subproceso reanuda la ejecución.
La información sobre herramientas de un segmento preemptado muestra el nombre del proceso o subproceso que provocó la preempción. Sin embargo, esto no implica que el proceso o hilo que se apoderó realmente se ejecutó durante todo el período de tiempo preemptado.
Tiempo de reposo
Estos segmentos en la línea de tiempo están asociados al tiempo de bloqueo que se clasifica como Suspensión. La categoría de sueño implica que un subproceso ha cedido voluntariamente su núcleo lógico y no realiza trabajo alguno. Durante este tiempo, se ha bloqueado un subproceso en una API que el Concurrency Visualizer considera como sueño. API como Sleep() y SwitchToThread() se dividen en este grupo.
Hora de sincronización
Estos segmentos de la escala de tiempo están asociados a tiempos de bloqueo que se clasifican como sincronización. Cuando un subproceso se marca como bloqueado en la sincronización, uno de estos elementos está implícito:
La ejecución del subproceso puede haber dado lugar a una llamada a una API de sincronización de subprocesos conocida, como
EnterCriticalSection()oWaitForSingleObject().El algoritmo de coincidencia de API no puede ser totalmente completo y, por lo tanto, algunas API que se podrían asignar a otras categorías también pueden aparecer como sincronización porque un marco de la pila de llamadas finalmente alcanzó un primitivo de bloqueo de kernel subyacente que se asignó a esta categoría.
Para entender la causa subyacente de un evento de bloqueo de un hilo, examine detenidamente las pilas de llamadas y los informes de perfiles.
Tiempo de procesamiento de la interfaz de usuario
Estos segmentos de la escala de tiempo están asociados a tiempos de bloqueo que se clasifican como procesamiento de la interfaz de usuario. Esto implica que un subproceso está bombeando mensajes de Windows o realizando otro trabajo de interfaz de usuario (UI). Durante este tiempo, se ha bloqueado un subproceso en una API que el Concurrency Visualizer considera como procesamiento de la interfaz de usuario. API como GetMessage() y MsgWaitForMultipleObjects() se dividen en este grupo.
Si no se identifica ninguna API de bloqueo predefinida, revise las pilas de llamadas y los informes de perfil para determinar las causas subyacentes del retraso.
La categoría Procesamiento de la interfaz de usuario le ayuda a comprender la capacidad de respuesta de las aplicaciones de GUI y es deseable en las aplicaciones que dependen de la capacidad de respuesta de la interfaz de usuario. Por ejemplo, si el subproceso de interfaz de usuario de una aplicación alcanza 100% tiempo en el procesamiento de la interfaz de usuario, probablemente responda. Sin embargo, si el subproceso de la interfaz de usuario pasa un tiempo considerable en otras categorías, busque las causas principales y considere las opciones para reducir las categorías que no son de interfaz de usuario en ese subproceso.