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)}
*/
代码块
代码块