GCD 串行/并行、同步/异步 组合

串行/并行:决定怎么拿任务,串行 - 一个任务完成再拿下一个,并行 - 同时拿多个。

同步/异步:决定怎么取线程,同步 - 不开新线程,异步:具备开多条线程能力

 

同步、串行:一个一个执行,不开线程。

同步、并行:一个一个执行,不开线程。

异步、串行:一个一个执行,开一条线程。

异步、并行:多个同时执行,开多条线程。

- (void)viewDidLoad {
    [super viewDidLoad];

    NSLog(@"============ mainThread %@",[NSThread mainThread]);
    
    [self cx_tb];
}

// 串行 + 同步
- (void)cx_tb
{
    dispatch_queue_t cx = dispatch_queue_create("ser", DISPATCH_QUEUE_SERIAL);
    for(int i = 0; i < 10; i++)
    {
        dispatch_sync(cx, ^{
            NSLog(@"--- %d, %@",i, [NSThread currentThread]);
            sleep(0.3);
            NSLog(@"--- 结束 %d",i);
        });
    }
}

// 打印结果 =================================
2019-12-22 15:31:03.441953+0800 GCD_Test[1213:1206317] ============ mainThread <NSThread: 0x600001715800>{number = 1, name = main}
2019-12-22 15:31:03.441999+0800 GCD_Test[1213:1206317] --- 0, <NSThread: 0x600001715800>{number = 1, name = main}
2019-12-22 15:31:03.442026+0800 GCD_Test[1213:1206317] --- 结束 0
2019-12-22 15:31:03.442040+0800 GCD_Test[1213:1206317] --- 1, <NSThread: 0x600001715800>{number = 1, name = main}
2019-12-22 15:31:03.442054+0800 GCD_Test[1213:1206317] --- 结束 1
2019-12-22 15:31:03.442063+0800 GCD_Test[1213:1206317] --- 2, <NSThread: 0x600001715800>{number = 1, name = main}
2019-12-22 15:31:03.442073+0800 GCD_Test[1213:1206317] --- 结束 2
2019-12-22 15:31:03.442082+0800 GCD_Test[1213:1206317] --- 3, <NSThread: 0x600001715800>{number = 1, name = main}
2019-12-22 15:31:03.442091+0800 GCD_Test[1213:1206317] --- 结束 3
2019-12-22 15:31:03.442100+0800 GCD_Test[1213:1206317] --- 4, <NSThread: 0x600001715800>{number = 1, name = main}
2019-12-22 15:31:03.442109+0800 GCD_Test[1213:1206317] --- 结束 4
2019-12-22 15:31:03.442118+0800 GCD_Test[1213:1206317] --- 5, <NSThread: 0x600001715800>{number = 1, name = main}
2019-12-22 15:31:03.442127+0800 GCD_Test[1213:1206317] --- 结束 5
2019-12-22 15:31:03.442135+0800 GCD_Test[1213:1206317] --- 6, <NSThread: 0x600001715800>{number = 1, name = main}
2019-12-22 15:31:03.442298+0800 GCD_Test[1213:1206317] --- 结束 6
2019-12-22 15:31:03.442317+0800 GCD_Test[1213:1206317] --- 7, <NSThread: 0x600001715800>{number = 1, name = main}
2019-12-22 15:31:03.442330+0800 GCD_Test[1213:1206317] --- 结束 7
2019-12-22 15:31:03.442340+0800 GCD_Test[1213:1206317] --- 8, <NSThread: 0x600001715800>{number = 1, name = main}
2019-12-22 15:31:03.442350+0800 GCD_Test[1213:1206317] --- 结束 8
2019-12-22 15:31:03.442359+0800 GCD_Test[1213:1206317] --- 9, <NSThread: 0x600001715800>{number = 1, name = main}
2019-12-22 15:31:03.442368+0800 GCD_Test[1213:1206317] --- 结束 9

 

 

//串行+异步
- (void)cx_yb
{
    dispatch_queue_t cx = dispatch_queue_create("ser", DISPATCH_QUEUE_SERIAL);
    for(int i = 0; i < 10; i++)
    {
        dispatch_async(cx, ^{
            NSLog(@"--- %d, %@",i, [NSThread currentThread]);
            sleep(0.3);
            NSLog(@"--- 结束 %d",i);
        });
    }
}


// 打印结果 =================================
2019-12-22 15:32:19.582160+0800 GCD_Test[1225:1207319] ============ mainThread <NSThread: 0x60000170d840>{number = 1, name = main}
2019-12-22 15:32:19.582329+0800 GCD_Test[1225:1207354] --- 0, <NSThread: 0x600001770d00>{number = 2, name = (null)}
2019-12-22 15:32:19.582386+0800 GCD_Test[1225:1207354] --- 结束 0
2019-12-22 15:32:19.582449+0800 GCD_Test[1225:1207354] --- 1, <NSThread: 0x600001770d00>{number = 2, name = (null)}
2019-12-22 15:32:19.582472+0800 GCD_Test[1225:1207354] --- 结束 1
2019-12-22 15:32:19.582486+0800 GCD_Test[1225:1207354] --- 2, <NSThread: 0x600001770d00>{number = 2, name = (null)}
2019-12-22 15:32:19.582498+0800 GCD_Test[1225:1207354] --- 结束 2
2019-12-22 15:32:19.582509+0800 GCD_Test[1225:1207354] --- 3, <NSThread: 0x600001770d00>{number = 2, name = (null)}
2019-12-22 15:32:19.582521+0800 GCD_Test[1225:1207354] --- 结束 3
2019-12-22 15:32:19.582533+0800 GCD_Test[1225:1207354] --- 4, <NSThread: 0x600001770d00>{number = 2, name = (null)}
2019-12-22 15:32:19.582544+0800 GCD_Test[1225:1207354] --- 结束 4
2019-12-22 15:32:19.582554+0800 GCD_Test[1225:1207354] --- 5, <NSThread: 0x600001770d00>{number = 2, name = (null)}
2019-12-22 15:32:19.582626+0800 GCD_Test[1225:1207354] --- 结束 5
2019-12-22 15:32:19.582648+0800 GCD_Test[1225:1207354] --- 6, <NSThread: 0x600001770d00>{number = 2, name = (null)}
2019-12-22 15:32:19.582661+0800 GCD_Test[1225:1207354] --- 结束 6
2019-12-22 15:32:19.582672+0800 GCD_Test[1225:1207354] --- 7, <NSThread: 0x600001770d00>{number = 2, name = (null)}
2019-12-22 15:32:19.582682+0800 GCD_Test[1225:1207354] --- 结束 7
2019-12-22 15:32:19.582692+0800 GCD_Test[1225:1207354] --- 8, <NSThread: 0x600001770d00>{number = 2, name = (null)}
2019-12-22 15:32:19.582701+0800 GCD_Test[1225:1207354] --- 结束 8
2019-12-22 15:32:19.582711+0800 GCD_Test[1225:1207354] --- 9, <NSThread: 0x600001770d00>{number = 2, name = (null)}
2019-12-22 15:32:19.582721+0800 GCD_Test[1225:1207354] --- 结束 9

 

//并行+同步
- (void)bx_tb
{
    dispatch_queue_t bx = dispatch_queue_create("ser", DISPATCH_QUEUE_CONCURRENT);
    for(int i = 0; i < 10; i++)
    {
        dispatch_sync(bx, ^{
            NSLog(@"--- %d, %@",i, [NSThread currentThread]);
            sleep(0.3);
            NSLog(@"--- 结束 %d",i);
        });
    }
}

// 打印结果 =================================
2019-12-22 15:33:12.193521+0800 GCD_Test[1233:1208168] ============ mainThread <NSThread: 0x60000170d800>{number = 1, name = main}
2019-12-22 15:33:12.193570+0800 GCD_Test[1233:1208168] --- 0, <NSThread: 0x60000170d800>{number = 1, name = main}
2019-12-22 15:33:12.193596+0800 GCD_Test[1233:1208168] --- 结束 0
2019-12-22 15:33:12.193608+0800 GCD_Test[1233:1208168] --- 1, <NSThread: 0x60000170d800>{number = 1, name = main}
2019-12-22 15:33:12.193620+0800 GCD_Test[1233:1208168] --- 结束 1
2019-12-22 15:33:12.193629+0800 GCD_Test[1233:1208168] --- 2, <NSThread: 0x60000170d800>{number = 1, name = main}
2019-12-22 15:33:12.193639+0800 GCD_Test[1233:1208168] --- 结束 2
2019-12-22 15:33:12.193648+0800 GCD_Test[1233:1208168] --- 3, <NSThread: 0x60000170d800>{number = 1, name = main}
2019-12-22 15:33:12.193658+0800 GCD_Test[1233:1208168] --- 结束 3
2019-12-22 15:33:12.193666+0800 GCD_Test[1233:1208168] --- 4, <NSThread: 0x60000170d800>{number = 1, name = main}
2019-12-22 15:33:12.193676+0800 GCD_Test[1233:1208168] --- 结束 4
2019-12-22 15:33:12.193685+0800 GCD_Test[1233:1208168] --- 5, <NSThread: 0x60000170d800>{number = 1, name = main}
2019-12-22 15:33:12.193694+0800 GCD_Test[1233:1208168] --- 结束 5
2019-12-22 15:33:12.193821+0800 GCD_Test[1233:1208168] --- 6, <NSThread: 0x60000170d800>{number = 1, name = main}
2019-12-22 15:33:12.193841+0800 GCD_Test[1233:1208168] --- 结束 6
2019-12-22 15:33:12.193853+0800 GCD_Test[1233:1208168] --- 7, <NSThread: 0x60000170d800>{number = 1, name = main}
2019-12-22 15:33:12.193864+0800 GCD_Test[1233:1208168] --- 结束 7
2019-12-22 15:33:12.193873+0800 GCD_Test[1233:1208168] --- 8, <NSThread: 0x60000170d800>{number = 1, name = main}
2019-12-22 15:33:12.193882+0800 GCD_Test[1233:1208168] --- 结束 8
2019-12-22 15:33:12.193891+0800 GCD_Test[1233:1208168] --- 9, <NSThread: 0x60000170d800>{number = 1, name = main}
2019-12-22 15:33:12.193901+0800 GCD_Test[1233:1208168] --- 结束 9

 

//并行+异步
- (void)bx_yb
{
    dispatch_queue_t bx = dispatch_queue_create("ser", DISPATCH_QUEUE_CONCURRENT);
    for(int i = 0; i < 10; i++)
    {
        dispatch_async(bx, ^{
            NSLog(@"--- %d, %@",i, [NSThread currentThread]);
            sleep(0.3);
            NSLog(@"--- 结束 %d",i);
        });
    }
}

// 打印结果 =================================
2019-12-22 15:34:00.432239+0800 GCD_Test[1243:1208883] ============ mainThread <NSThread: 0x600001709840>{number = 1, name = main}
2019-12-22 15:34:00.432573+0800 GCD_Test[1243:1208928] --- 0, <NSThread: 0x600001746dc0>{number = 3, name = (null)}
2019-12-22 15:34:00.432581+0800 GCD_Test[1243:1208933] --- 1, <NSThread: 0x60000170dd80>{number = 2, name = (null)}
2019-12-22 15:34:00.432581+0800 GCD_Test[1243:1208932] --- 2, <NSThread: 0x600001752980>{number = 4, name = (null)}
2019-12-22 15:34:00.432649+0800 GCD_Test[1243:1208929] --- 3, <NSThread: 0x600001770040>{number = 5, name = (null)}
2019-12-22 15:34:00.432666+0800 GCD_Test[1243:1208961] --- 6, <NSThread: 0x60000176b0c0>{number = 8, name = (null)}
2019-12-22 15:34:00.432671+0800 GCD_Test[1243:1208960] --- 5, <NSThread: 0x6000017076c0>{number = 7, name = (null)}
2019-12-22 15:34:00.432676+0800 GCD_Test[1243:1208933] --- 结束 1
2019-12-22 15:34:00.432682+0800 GCD_Test[1243:1208932] --- 结束 2
2019-12-22 15:34:00.432682+0800 GCD_Test[1243:1208929] --- 结束 3
2019-12-22 15:34:00.432686+0800 GCD_Test[1243:1208961] --- 结束 6
2019-12-22 15:34:00.432681+0800 GCD_Test[1243:1208962] -2019-12-22 15:34:00.432685+0800 GCD_Test[1243:1208928] --- 结束 0
-- 7, <NSThread: 0x600001752b00>{number = 9, name = (null)}
2019-12-22 15:34:00.432688+0800 GCD_Test[1243:1208963] --- 8, <NSThread: 0x600001745240>{number = 10, name = (null)}
2019-12-22 15:34:00.432675+0800 GCD_Test[1243:1208959] --- 4, <NSThread: 0x600001770080>{number = 6, name = (null)}
2019-12-22 15:34:00.432770+0800 GCD_Test[1243:1208959] --- 结束 4
2019-12-22 15:34:00.432772+0800 GCD_Test[1243:1208963] --- 结束 8
2019-12-22 15:34:00.432775+0800 GCD_Test[1243:1208962] --- 结束 7
2019-12-22 15:34:00.432697+0800 GCD_Test[1243:1208960] --- 结束 5
2019-12-22 15:34:00.432714+0800 GCD_Test[1243:1208964] --- 9, <NSThread: 0x600001764040>{number = 11, name = (null)}
2019-12-22 15:34:00.432816+0800 GCD_Test[1243:1208964] --- 结束 9

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值