GCD线程回内核次数和任务提交数量关系

实验环境: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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容