美文网首页
多线程《API》相关_简单了解2

多线程《API》相关_简单了解2

作者: 凯司机 | 来源:发表于2022-08-19 22:59 被阅读0次

    gcd相关API的简单使用

    // gcd循环
    - (void)applyGCDLoop {
        dispatch_queue_t queue = dispatch_queue_create(NULL, DISPATCH_QUEUE_CONCURRENT);
        dispatch_apply(5, queue, ^(size_t iteration) {
            NSLog(@"_任务_%@",[NSThread currentThread]);
        });
        NSLog(@"_结束_");
    }
    /*
    2022-08-20 18:29:40.561764+0800 YDBasicPublicCourse[39721:2480584] _任务_<NSThread: 0x600003afab80>{number = 8, name = (null)}
    2022-08-20 18:29:40.561800+0800 YDBasicPublicCourse[39721:2480582] _任务_<NSThread: 0x600003a8ee40>{number = 4, name = (null)}
    2022-08-20 18:29:40.561853+0800 YDBasicPublicCourse[39721:2480581] _任务_<NSThread: 0x600003afa180>{number = 7, name = (null)}
    2022-08-20 18:29:40.562020+0800 YDBasicPublicCourse[39721:2480582] _任务_<NSThread: 0x600003a8ee40>{number = 4, name = (null)}
    2022-08-20 18:29:40.562420+0800 YDBasicPublicCourse[39721:2480529] _任务_<_NSMainThread: 0x600003ab0840>{number = 1, name = main}
    2022-08-20 18:29:40.563278+0800 YDBasicPublicCourse[39721:2480529] _结束_
    */
    
    // gcd循环apply内部再使用异步
    - (void)applyGCDLoop {
        dispatch_queue_t queue = dispatch_queue_create(NULL, DISPATCH_QUEUE_CONCURRENT);
        dispatch_apply(5, queue, ^(size_t iteration) {
    //        NSLog(@"_任务_%@",[NSThread currentThread]);
            dispatch_async(queue, ^{
                NSLog(@"_任务_%@",[NSThread currentThread]);
            });
        });
        NSLog(@"_结束_");
    }
    /*
    2022-08-20 18:44:53.937721+0800 YDBasicPublicCourse[39932:2493458] _结束_
    2022-08-20 18:44:53.937789+0800 YDBasicPublicCourse[39932:2493588] _任务_<NSThread: 0x600000667040>{number = 4, name = (null)}
    2022-08-20 18:44:53.937789+0800 YDBasicPublicCourse[39932:2493589] _任务_<NSThread: 0x60000066c280>{number = 7, name = (null)}
    2022-08-20 18:44:53.937805+0800 YDBasicPublicCourse[39932:2493591] _任务_<NSThread: 0x600000668300>{number = 6, name = (null)}
    2022-08-20 18:44:53.937819+0800 YDBasicPublicCourse[39932:2493587] _任务_<NSThread: 0x600000615f40>{number = 5, name = (null)}
    2022-08-20 18:44:53.937969+0800 YDBasicPublicCourse[39932:2493589] _任务_<NSThread: 0x60000066c280>{number = 7, name = (null)}
    */
    
    // group——随机运行
    // 多张图片下载后变成一张图片,组内完成通知全部完成。
    - (void)group {
        dispatch_group_t group = dispatch_group_create();
        dispatch_group_enter(group);
        dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
            dispatch_async(dispatch_get_global_queue(0, 0), ^{
                NSLog(@"_任务1_%@",[NSThread currentThread]);
                dispatch_group_leave(group);
            });
        });
        
        dispatch_group_enter(group);
        dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
            dispatch_async(dispatch_get_global_queue(0, 0), ^{
                NSLog(@"_任务2_%@",[NSThread currentThread]);
                dispatch_group_leave(group);
            });
        });
        
        dispatch_group_enter(group);
        dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
            dispatch_async(dispatch_get_global_queue(0, 0), ^{
                NSLog(@"_任务3_%@",[NSThread currentThread]);
                dispatch_group_leave(group);
            });
        });
        
        dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{
            NSLog(@"_结束_%@",[NSThread currentThread]);
        });
    }
    /*
    随机结果:
    2022-08-20 20:04:02.685113+0800 YDBasicPublicCourse[40488:2528500] _任务2_<NSThread: 0x6000037ec580>{number = 4, name = (null)}
    2022-08-20 20:04:02.685119+0800 YDBasicPublicCourse[40488:2528494] _任务3_<NSThread: 0x6000037eab40>{number = 7, name = (null)}
    2022-08-20 20:04:02.685186+0800 YDBasicPublicCourse[40488:2528495] _任务1_<NSThread: 0x6000037e9900>{number = 5, name = (null)}
    2022-08-20 20:04:02.685617+0800 YDBasicPublicCourse[40488:2528494] _结束_<NSThread: 0x6000037eab40>{number = 7, name = (null)}
    
    
    随机结果2:
    2022-08-20 20:05:47.390430+0800 YDBasicPublicCourse[40501:2529997] _任务1_<NSThread: 0x600000a1d500>{number = 5, name = (null)}
    2022-08-20 20:05:47.390430+0800 YDBasicPublicCourse[40501:2529994] _任务2_<NSThread: 0x600000a1df40>{number = 4, name = (null)}
    2022-08-20 20:05:47.390430+0800 YDBasicPublicCourse[40501:2529993] _任务3_<NSThread: 0x600000a09480>{number = 6, name = (null)}
    2022-08-20 20:05:47.390792+0800 YDBasicPublicCourse[40501:2529993] _结束_<NSThread: 0x600000a09480>{number = 6, name = (null)}
    */
    
    // group
    - (void)group {
        dispatch_group_t group = dispatch_group_create();
        dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
            NSLog(@"_任务1_%@",[NSThread currentThread]);
        });
        dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
            NSLog(@"_任务2_%@",[NSThread currentThread]);
        });
        dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
            NSLog(@"_任务3_%@",[NSThread currentThread]);
        });
        dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{
            NSLog(@"_结束_%@",[NSThread currentThread]);
        });
    }
    /*
    随机结果1:
    2022-08-20 20:16:47.488590+0800 YDBasicPublicCourse[40604:2543810] _任务2_<NSThread: 0x600000d7a4c0>{number = 4, name = (null)}
    2022-08-20 20:16:47.488590+0800 YDBasicPublicCourse[40604:2543809] _任务1_<NSThread: 0x600000d74c80>{number = 6, name = (null)}
    2022-08-20 20:16:47.488590+0800 YDBasicPublicCourse[40604:2543812] _任务3_<NSThread: 0x600000d76580>{number = 7, name = (null)}
    2022-08-20 20:16:47.489105+0800 YDBasicPublicCourse[40604:2543809] _结束_<NSThread: 0x600000d74c80>{number = 6, name = (null)}
    
    随机结果2:
    2022-08-20 20:17:54.554155+0800 YDBasicPublicCourse[40613:2545547] _任务1_<NSThread: 0x600001d50000>{number = 7, name = (null)}
    2022-08-20 20:17:54.554155+0800 YDBasicPublicCourse[40613:2545542] _任务3_<NSThread: 0x600001d4c840>{number = 4, name = (null)}
    2022-08-20 20:17:54.554155+0800 YDBasicPublicCourse[40613:2545549] _任务2_<NSThread: 0x600001d49b80>{number = 5, name = (null)}
    2022-08-20 20:17:54.554456+0800 YDBasicPublicCourse[40613:2545547] _结束_<NSThread: 0x600001d50000>{number = 7, name = (null)}
    */
    

    多线程优先级简单探索

    // 顺序不可控,随机三条线程
    - (void)priorityOne {
        dispatch_queue_t q1 = dispatch_queue_create("yd.com.q1", DISPATCH_QUEUE_SERIAL);
        dispatch_queue_t q2 = dispatch_queue_create("yd.com.q2", DISPATCH_QUEUE_SERIAL);
        dispatch_queue_t q3 = dispatch_queue_create("yd.com.q3", DISPATCH_QUEUE_SERIAL);
        
        dispatch_async(q1, ^{
            NSLog(@"_任务1_%@",[NSThread currentThread]);
        });
        
        dispatch_async(q2, ^{
            NSLog(@"_任务2_%@",[NSThread currentThread]);
        });
        
        dispatch_async(q3, ^{
            NSLog(@"_任务3_%@",[NSThread currentThread]);
        });
    }
    /*
    运行结果1:
    2022-08-20 20:30:50.081199+0800 YDBasicPublicCourse[40760:2562251] _任务2_<NSThread: 0x600001d03880>{number = 8, name = (null)}
    2022-08-20 20:30:50.081463+0800 YDBasicPublicCourse[40760:2562249] _任务1_<NSThread: 0x600001d0d200>{number = 7, name = (null)}
    2022-08-20 20:30:50.081667+0800 YDBasicPublicCourse[40760:2562250] _任务3_<NSThread: 0x600001d0c680>{number = 4, name = (null)}
    
    运行结果2:
    2022-08-20 20:32:18.688989+0800 YDBasicPublicCourse[40782:2564611] _任务1_<NSThread: 0x600003b86100>{number = 6, name = (null)}
    2022-08-20 20:32:18.688989+0800 YDBasicPublicCourse[40782:2564617] _任务2_<NSThread: 0x600003b82640>{number = 5, name = (null)}
    2022-08-20 20:32:18.688989+0800 YDBasicPublicCourse[40782:2564613] _任务3_<NSThread: 0x600003b94040>{number = 7, name = (null)}
    */
    
    // 多线程优先级_玩玩就行,无序。
    - (void)priorityTwo {
        dispatch_queue_t q1 = dispatch_queue_create("yd.com.q1", DISPATCH_QUEUE_SERIAL);
        dispatch_queue_t q2 = dispatch_queue_create("yd.com.q2", DISPATCH_QUEUE_SERIAL);
        dispatch_queue_t q3 = dispatch_queue_create("yd.com.q3", DISPATCH_QUEUE_SERIAL);
        
    //    dispatch_set_target_queue(q1, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0));
    //    dispatch_set_target_queue(q2, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0));
        dispatch_set_target_queue(q3, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0));
        
        dispatch_async(q1, ^{
            NSLog(@"_任务1_%@",[NSThread currentThread]);
        });
        
        dispatch_async(q2, ^{
            NSLog(@"_任务2_%@",[NSThread currentThread]);
        });
        
        dispatch_async(q3, ^{
            NSLog(@"_任务3_%@",[NSThread currentThread]);
        });
    }
    /*
    运行结果1:
    2022-08-20 20:46:03.886545+0800 YDBasicPublicCourse[40961:2583690] _任务1_<NSThread: 0x60000363f140>{number = 5, name = (null)}
    2022-08-20 20:46:03.886545+0800 YDBasicPublicCourse[40961:2583692] _任务3_<NSThread: 0x600003639c40>{number = 6, name = (null)}
    2022-08-20 20:46:03.886545+0800 YDBasicPublicCourse[40961:2583686] _任务2_<NSThread: 0x600003639b80>{number = 7, name = (null)}
    
    运行结果2:
    2022-08-20 20:47:20.251079+0800 YDBasicPublicCourse[40972:2585637] _任务3_<NSThread: 0x600002146700>{number = 6, name = (null)}
    2022-08-20 20:47:20.251079+0800 YDBasicPublicCourse[40972:2585635] _任务1_<NSThread: 0x600002143cc0>{number = 5, name = (null)}
    2022-08-20 20:47:20.251079+0800 YDBasicPublicCourse[40972:2585638] _任务2_<NSThread: 0x600002146b00>{number = 3, name = (null)}
    */
    
    代码块
    
    代码块
    

    相关文章

      网友评论

          本文标题:多线程《API》相关_简单了解2

          本文链接:https://www.haomeiwen.com/subject/jshpgrtx.html