GCD 文章理解
1,GCD如何控制线程的最大并发数?
(1,通过信号量的大小控制线成并发执行的数量)
(2,一定数量的串行队列代替并发队列,达到控制线程的数量)
(3,使用NSOperationQueue maxConcurrentOperationCount 属性控制线程的最大并发数)
2, 详细介绍dispatch_block
dispatch_block_t
3,dispath_group(任务组)
dispatch_group_enter && dispatch_group_leave 成对出现
group = dispatch_group_create();
queue = dispatch_get_global_queue(0, 0);
dispatch_group_enter(group);
dispatch_group_async(group, queue, ^{
NSLog(@"%@---block1结束。。。",[NSThreadcurrentThread]);
sleep(3);
dispatch_group_leave(group);
});
NSLog(@"%@---1结束。。。",[NSThreadcurrentThread]);
dispatch_group_enter(group);
dispatch_group_async(group, queue, ^{
NSLog(@"%@---block2结束。。。",[NSThreadcurrentThread]);
sleep(3);
dispatch_group_leave(group);
});
NSLog(@"%@---2结束。。。",[NSThreadcurrentThread]);
dispatch_group_notify(group, queue, ^{
NSLog(@"%@---all结束。。。",[NSThreadcurrentThread]);
});
log:
2018-04-19 17:04:09.554847+0800 GCD_Group[1928:603701] {number = 1, name = main}---1结束。。。
2018-04-19 17:04:09.554860+0800 GCD_Group[1928:603735] {number = 5, name = (null)}---block1结束。。。
2018-04-19 17:04:09.555050+0800 GCD_Group[1928:603734] {number = 4, name = (null)}---block2结束。。。
2018-04-19 17:04:09.555053+0800 GCD_Group[1928:603701] {number = 1, name = main}---2结束。。。
2018-04-19 17:04:12.560401+0800 GCD_Group[1928:603734] {number = 4, name = (null)}---all结束。。。