GCD之Group

简介:

1.问题的提出

在上面的GCD之全局、主线程中介绍了dispatch_get_global_queue、dispatch_get_main_queue的用法,可以看到最后执行的时间在10s 左右,在上面的例子只是将任务转到后台,变成后台任务执行,同时-(NSString *)secondCast:(NSString *)data和-(NSInteger)thrid:(NSString *)data两个方法可以不分先后顺序同时执行,那就是能不能让他们平行执行来提高效率呢?这时就有了GCD之Group的出现。Group将block追加到对应的线程队列上,和后面要介绍的diapatch_apply类似。

2.下面是Group的使用例子(在GCD之全局、主线程的基础上做了一些修改)



NSDate *startTiem=[NSDate date];

    //对于全局队列 声明时第一个参数有三种:三种对应的是不同的全局队列 第二个参数目前未使用 始终为0

    //1.DISPATCH_QUEUE_PRIORITY_DEFAULT

    //2.DISPATCH_QUEUE_PRIORITY_HIGH

    //3.DISPATCH_QUEUE_PRIORITY_LOW

    dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);

    //dispatch_async 开启异步线程

    dispatch_async(queue, ^{

        NSString *fetchstring= [self fetchData];

        NSString *firststring=[self firstCast:fetchstring];

        //创建dispatch_group_t

        dispatch_group_t group= dispatch_group_create();

        __block NSString *secondstring;

        __block NSInteger length;

        //通过dispatch_group_async来开启任务

        dispatch_group_async(group, queue, ^{

            secondstring=[self secondCast:firststring];

        });

        dispatch_group_async(group, queue, ^{

             length =[self thrid:fetchstring];

        });

        //dispatch_group_notify 等待Group中其他任务完成后再运行

        dispatch_group_notify(group, queue, ^{

            NSDate *endtime=[NSDate date];

            //对于UI的更新获取值都在主线程中 此时要用主线程来更新

            dispatch_async(dispatch_get_main_queue(), ^{

                self.textview.text=secondstring;

            });

            NSLog(@"%@",[NSString stringWithFormat:@"%ld  %@",length,secondstring]);

            NSLog(@"%f",[endtime timeIntervalSinceDate:startTiem]);

        });

    });

 3.运行结果此时只用了7s


相关文章
|
6月前
|
机器学习/深度学习
计算sum=1+2...+n,要求number和sum的类型都是int,且sum在32位以内~
计算sum=1+2...+n,要求number和sum的类型都是int,且sum在32位以内~
|
SQL
sum函数
sum函数
82 0
|
机器学习/深度学习
3045 Lcm与Gcd构造
已知: gcd(a,b) = n lcm(a,b) = m 求min(a,b)是多少 通过gcd的了解我们可以知道,两个数a == k1 * n以及b == k2 * n并且gcd(k1,k2) == 1 ab == n * m m == a * b/n ab == k1 * k2 * n * n 于是可以得到 m == k1 * k2 * n 将n除到左边,可以得出m/n == k1 * k2 于是k1 和 k2 都是 m / n的因子 这样就可以以根号的复杂度找出这两个因子,并判断k1 和 k2 是否是互质的 a + b == (k1 + k2 ) * n 所以说代码:
93 0
1447. 最简分数 : 简单数论运用题(求 gcd 几种方式)
1447. 最简分数 : 简单数论运用题(求 gcd 几种方式)
|
存储 Java 测试技术
Next Fibonacci Number(下一个斐波拉契数列)
Write a program that takes input of integer N, followed by N more integers. For each integer, output the next fibonacci number after it.
1214 0
|
算法 C#
算法题丨3Sum
描述 Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
1200 0
|
存储 算法 C#
算法题丨Two Sum
描述 Given an array of integers, return indices of the two numbers such that they add up to a specific target.
1134 0
|
索引
Two Sum
Given an array of integers, find two numbers such that they add up to a specific target number.
740 0

热门文章

最新文章