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] _任务_{number = 8, name = (null)}
2022-08-20 18:29:40.561800+0800 YDBasicPublicCourse[39721:2480582] _任务_{number = 4, name = (null)}
2022-08-20 18:29:40.561853+0800 YDBasicPublicCourse[39721:2480581] _任务_{number = 7, name = (null)}
2022-08-20 18:29:40.562020+0800 YDBasicPublicCourse[39721:2480582] _任务_{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] _任务_{number = 4, name = (null)}
2022-08-20 18:44:53.937789+0800 YDBasicPublicCourse[39932:2493589] _任务_{number = 7, name = (null)}
2022-08-20 18:44:53.937805+0800 YDBasicPublicCourse[39932:2493591] _任务_{number = 6, name = (null)}
2022-08-20 18:44:53.937819+0800 YDBasicPublicCourse[39932:2493587] _任务_{number = 5, name = (null)}
2022-08-20 18:44:53.937969+0800 YDBasicPublicCourse[39932:2493589] _任务_{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_{number = 4, name = (null)}
2022-08-20 20:04:02.685119+0800 YDBasicPublicCourse[40488:2528494] _任务3_{number = 7, name = (null)}
2022-08-20 20:04:02.685186+0800 YDBasicPublicCourse[40488:2528495] _任务1_{number = 5, name = (null)}
2022-08-20 20:04:02.685617+0800 YDBasicPublicCourse[40488:2528494] _结束_{number = 7, name = (null)}
随机结果2:
2022-08-20 20:05:47.390430+0800 YDBasicPublicCourse[40501:2529997] _任务1_{number = 5, name = (null)}
2022-08-20 20:05:47.390430+0800 YDBasicPublicCourse[40501:2529994] _任务2_{number = 4, name = (null)}
2022-08-20 20:05:47.390430+0800 YDBasicPublicCourse[40501:2529993] _任务3_{number = 6, name = (null)}
2022-08-20 20:05:47.390792+0800 YDBasicPublicCourse[40501:2529993] _结束_{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_{number = 4, name = (null)}
2022-08-20 20:16:47.488590+0800 YDBasicPublicCourse[40604:2543809] _任务1_{number = 6, name = (null)}
2022-08-20 20:16:47.488590+0800 YDBasicPublicCourse[40604:2543812] _任务3_{number = 7, name = (null)}
2022-08-20 20:16:47.489105+0800 YDBasicPublicCourse[40604:2543809] _结束_{number = 6, name = (null)}
随机结果2:
2022-08-20 20:17:54.554155+0800 YDBasicPublicCourse[40613:2545547] _任务1_{number = 7, name = (null)}
2022-08-20 20:17:54.554155+0800 YDBasicPublicCourse[40613:2545542] _任务3_{number = 4, name = (null)}
2022-08-20 20:17:54.554155+0800 YDBasicPublicCourse[40613:2545549] _任务2_{number = 5, name = (null)}
2022-08-20 20:17:54.554456+0800 YDBasicPublicCourse[40613:2545547] _结束_{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_{number = 8, name = (null)}
2022-08-20 20:30:50.081463+0800 YDBasicPublicCourse[40760:2562249] _任务1_{number = 7, name = (null)}
2022-08-20 20:30:50.081667+0800 YDBasicPublicCourse[40760:2562250] _任务3_{number = 4, name = (null)}
运行结果2:
2022-08-20 20:32:18.688989+0800 YDBasicPublicCourse[40782:2564611] _任务1_{number = 6, name = (null)}
2022-08-20 20:32:18.688989+0800 YDBasicPublicCourse[40782:2564617] _任务2_{number = 5, name = (null)}
2022-08-20 20:32:18.688989+0800 YDBasicPublicCourse[40782:2564613] _任务3_{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_{number = 5, name = (null)}
2022-08-20 20:46:03.886545+0800 YDBasicPublicCourse[40961:2583692] _任务3_{number = 6, name = (null)}
2022-08-20 20:46:03.886545+0800 YDBasicPublicCourse[40961:2583686] _任务2_{number = 7, name = (null)}
运行结果2:
2022-08-20 20:47:20.251079+0800 YDBasicPublicCourse[40972:2585637] _任务3_{number = 6, name = (null)}
2022-08-20 20:47:20.251079+0800 YDBasicPublicCourse[40972:2585635] _任务1_{number = 5, name = (null)}
2022-08-20 20:47:20.251079+0800 YDBasicPublicCourse[40972:2585638] _任务2_{number = 3, name = (null)}
*/
代码块
代码块