实验环境:A16(4E+2P),iOS 26
发起线程请求的参数是0x20(WQOPS_QUEUE_REQTHREADS),线程回内核的参数是0x4(WQOPS_THREAD_RETURN),观察这两个参数在不同任务数量下的调用次数:
10、20、50、100
结论:
主线程:
仅发起一个0x20请求
worker线程的情况如下:
0x20请求发起数量为0个或1个
0x4请求发起数量为1个或2个,2个请求仅一个线程发起
用例:提交不同数量的CPU任务,查看是否存在冗余唤醒的情况
void wakeup()
{
sleep(6);
dispatch_group_t group = dispatch_group_create();
for (int i = 0; i < 100; i++) {
dispatch_group_async(group, dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^{
cpu_intensive_work("test", 1);
});
}
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
sleep(1);
exit(0);
}
内核调用展示如下:
主线程:

Screenshot 2025-10-15 at 15.33.04.png
worker线程:

Screenshot 2025-10-15 at 15.33.56.png
