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月前
|
SQL 关系型数据库 数据处理
详解SQL语句中的GROUP BY和聚合函数COUNT、SUM、AVG、MIN和MAX。
详解SQL语句中的GROUP BY和聚合函数COUNT、SUM、AVG、MIN和MAX。
942 0
|
机器学习/深度学习
计算sum=1+2...+n,要求number和sum的类型都是int,且sum在32位以内~
计算sum=1+2...+n,要求number和sum的类型都是int,且sum在32位以内~
|
人工智能 BI vr&ar
div2-1519-D-Maximum Sum of Products-dp
You are given two integer arrays a and b of length n. You can reverse at most one subarray (continuous subsegment) of the array a. Your task is to reverse such a subarray that the sum ∑ i = 1 n a [ i ] ⋅ b [ i ] \sum_{i=1}^na[i]⋅b[i]∑ i=1 n ​ a[i]⋅b[i] is maximized.
132 0
1093. Count PAT's (25)
#include #include #include using namespace std; int main() { string s; cin >> s; long long sum = 0, p = 0, t = 0; for (int i = 0; i < s.
801 0
|
算法 Java
算法题-Count and Say
题目来自 LeetCode The count-and-say sequence is the sequence of integers with the first five terms as following: 1 11 21 1211 111221 1 is read off as “one 1” or 11.
1061 0
|
机器学习/深度学习 人工智能