Problema de advertencia de hilo XCode14

Recientemente, recibí algunos informes de error en el sistema iOS 16. Después de DSYM, descubrí que había una advertencia en el lugar donde se cargó el registro de Alibaba Cloud. La advertencia se emitió durante la depuración, y este problema no es esencial, ya que representa alrededor del 10% ~ 20% de la siguiente manera:

Thread running at QOS_CLASS_USER_INITIATED waiting on a lower QoS thread running at 
QOS_CLASS_DEFAULT. Investigate ways to avoid priority inversions

El significado de esta pregunta es probablemente que el subproceso que ejecutamos en QOS_CLASS_USER_INITIATED está ejecutando un subproceso de QoS bajo de QOS_CLASS_DEFAULT delante de él, lo que puede causar una inversión de prioridad . Después de conocer el problema, el método de reparación es claro. Vamos a modificar la prioridad del hilo actual aquí :

dispatch_queue_t referQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0); //降低线程优先级
dispatch_async(referQueue, ^{
    [traker send:dic];
});

Repitió la prueba muchas veces y descubrió que no hay ninguna advertencia.

Por cierto, ¡explique qué son la inversión de prioridad de subprocesos y la prioridad de subprocesos!

1. Inversión de prioridad La inversión de prioridad
ocurre cuando un trabajo de mayor prioridad depende de un trabajo de menor prioridad, o se convierte en el resultado de un trabajo de menor prioridad. Como resultado, pueden producirse bloqueos, giros y sondeos.
En el caso de trabajo síncrono, el sistema resolverá automáticamente las inversiones de prioridad aumentando la QoS del trabajo de menor prioridad durante la inversión. Esto sucederá cuando
se llame a dispatch_sync() y dispatch_wait() en la cola serial.
Cuando se llama a pthread_mutex_lock(), el mutex es controlado por un subproceso con una QoS más baja. En este caso, el subproceso que contiene el bloqueo se eleva a la QoS de la persona que llama. Sin embargo, esta actualización de QoS no ocurrirá en varios bloqueos.
En el caso de trabajo asíncrono, el sistema intentará resolver las inversiones de prioridad que se produzcan en las colas seriales

2. Prioridad de subprocesos

 DISPATCH_QUEUE_PRIORITY_HIGH 2  高
 DISPATCH_QUEUE_PRIORITY_DEFAULT 0 默认
 DISPATCH_QUEUE_PRIORITY_LOW -2 低
 DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN 2 后台优先级

Supongo que te gusta

Origin blog.csdn.net/weixin_38201792/article/details/129237938
Recomendado
Clasificación