WorkerIdle

用例1:提交512个串行队列任务后,主线程休眠6s

for (size_t i = 0; i < 512; I++)
{
    uint64_t tsc = arm64_cnt_vct();
    // 每个任务一个独立串行队列,提交后释放即可
    char label[64];
    snprintf(label, sizeof(label), "com.benchmark.serial.%zu", i);
    dispatch_queue_t q = dispatch_queue_create(label, dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, qos, 0));
    dispatch_async(q, ^{
        TRACE_COUNT("cnt_delay", arm64_cnt_vct() - tsc);
        run_task(type, cost);
    });
}
usleep(6000000);
worker类型1:Idle满5s后退出
worker类型2:执行完任务后直接退出

结果统计:
说明:

  1. 63个worker走的超时退出,1个worker保持不退出,其余448个worker由于超编直接退出
  2. worker idle的时长都是5s左右,因为timer到期后,触发worker销毁会带动下一个worker销毁,链式完成
[idle_then_terminate] last_idle_span: min=5060.00ms  median=5060.00ms  max=6120.00ms
[idle_then_terminate] last_idle_span 直方图:
  0-1ms            0  
  1-5ms            0  
  5-10ms           0  
  10-20ms          0  
  20-50ms          0  
  50-100ms         0  
  100-200ms        0  
  200-500ms        0  
  500-1000ms       0  
  1-1.5s           0  
  1.5-2s           0  
  2-2.5s           0  
  2.5-3s           0  
  3-3.5s           0  
  3.5-4s           0  
  4-4.5s           0  
  4.5-5s           0  
  5-5.5s          63  ###############################################################
  >5.5s            1  #

用例2:向多个串行队列周期性提交任务,最后主线程睡眠6秒

    for (size_t i = 0; i < 512; i++) {
        dispatch_queue_t queue = queues[i];
        controllers.emplace_back([queue, iterations, cost_us, cycle_gap_us] {
            for (size_t k = 0; k < iterations; k++) {
                usleep((useconds_t)cycle_gap_us);
                uint64_t tsc = arm64_cnt_vct();
                dispatch_async(queue, ^{
                    TRACE_COUNT("cnt_delay", arm64_cnt_vct() - tsc);
                    run_task(2, cost_us);
                });
            }
        });
    }
现象1:睡眠4.6秒后退出
现象2:睡眠2.8秒
现象2:睡眠954.46ms

结果统计:

    0-1ms           3                                                                                                                                       
    1-5ms          11  #                                                                                                                                    
    5-10ms          2                                                                                                                                       
    10-20ms         1                                                                                                                                       
    20-50ms         1                                                                                                                                       
    50-100ms        0                                                                                                                                       
    100-200ms       1                                                                                                                                       
    200-500ms       0                                                                                                                                       
    500-1000ms      3                                                                                                                                       
    1-1.5s          3                                                                                                                                       
    1.5-2s          5  #                                                                                                                                    
    2-2.5s          3                                                                                                                                       
    2.5-3s          4  #                                                                                                                                    
    3-3.5s          6  #                                                                                                                                    
    3.5-4s          8  #                                                                                                                                    
    4-4.5s          5  #                                                                                                                                    
    4.5-5s          7  #                                                                                                                                    
    5-5.5s          6  #                                                                                                                                    
    >5.5s          80  ########                                                                                                                             
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容