切勿混淆串行队列、并行队列和同步、异步

串行队列:按照指派的顺序来执行任务,前一个执行完下一个才能执行

dispatch_queue_t serialQueue=dispatch_queue_create("test",DISPATCH_QUEUE_SERIAL);

    int i;

    for (i=0; i<100; i++ ) {

        dispatch_async(serialQueue, ^{

            NSLog(@"任务1"); //任务一

        });

        dispatch_async(serialQueue, ^{

            NSLog(@"任务2"); //任务二

        });

        dispatch_async(serialQueue, ^{

            NSLog(@"任务3"); //任务三

        });

    }

运行结果:

2016-10-27 12:02:20.528 GCD_iOS[650:31492] 任务1

2016-10-27 12:02:20.532 GCD_iOS[650:31492] 任务2

2016-10-27 12:02:20.534 GCD_iOS[650:31492] 任务3

2016-10-27 12:02:20.534 GCD_iOS[650:31492] 任务1

2016-10-27 12:02:20.534 GCD_iOS[650:31492] 任务2

2016-10-27 12:02:20.535 GCD_iOS[650:31492] 任务3

2016-10-27 12:02:20.536 GCD_iOS[650:31492] 任务1

2016-10-27 12:02:20.536 GCD_iOS[650:31492] 任务2

2016-10-27 12:02:20.536 GCD_iOS[650:31492] 任务3

2016-10-27 12:02:20.537 GCD_iOS[650:31492] 任务1

2016-10-27 12:02:20.537 GCD_iOS[650:31492] 任务2

2016-10-27 12:02:20.537 GCD_iOS[650:31492] 任务3

2016-10-27 12:02:20.537 GCD_iOS[650:31492] 任务1

2016-10-27 12:02:20.538 GCD_iOS[650:31492] 任务2

2016-10-27 12:02:20.538 GCD_iOS[650:31492] 任务3


并行队列:能够同时执行一个或多个任务,执行任务的顺序并不一定

//并发队列测试

        dispatch_queue_t globalQueue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

        NSLog(@"current task");

    int i;

    for (i=0; i<100; i++ ) {

        dispatch_async(globalQueue, ^{

            NSLog(@"任务1"); //任务一

        });

        dispatch_async(globalQueue, ^{

            NSLog(@"任务2"); //任务二

        });

        dispatch_async(globalQueue, ^{

            NSLog(@"任务3"); //任务三

        });

    }



输出结果:

2016-10-27 12:12:48.243 GCD_iOS[814:38536] 任务2

2016-10-27 12:12:48.243 GCD_iOS[814:38535] 任务1

2016-10-27 12:12:48.243 GCD_iOS[814:38537] 任务3

2016-10-27 12:12:48.243 GCD_iOS[814:38538] 任务1

2016-10-27 12:12:48.243 GCD_iOS[814:38539] 任务2

2016-10-27 12:12:48.244 GCD_iOS[814:38539] 任务3

2016-10-27 12:12:48.244 GCD_iOS[814:38539] 任务1

2016-10-27 12:12:48.245 GCD_iOS[814:38539] 任务2

2016-10-27 12:12:48.245 GCD_iOS[814:38536] 任务3



同步: 在当前线程中执行任务,不具备开启新线程的能力

异步:在新的线程中执行任务,具备开启新线程的能力


切勿混淆串行队列、并行队列和同步、异步_第1张图片


你可能感兴趣的:(iOS基础)