ios-关于GCD的简单使用

来源:互联网 发布:c语言1到100的素数 编辑:程序博客网 时间:2024/05/15 08:39

ios-关于GCD的简单使用
- (
void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    //串行队列

    self.serialQueue = dispatch_queue_create("serialQueue.ys.com"DISPATCH_QUEUE_SERIAL);

    //并行队列

    self.concurrentQueue = dispatch_queue_create("concurrentQueue.ys.com"DISPATCH_QUEUE_CONCURRENT);

    

    [self queue_taskTest];

    [self queue_taskTest2];

    [self queue_taskTest3];

    [self queue_taskTest4];


}



/**

 串行队列 + 同步执行

 */

-(void)queue_taskTest{

    dispatch_sync(self.serialQueue, ^{

        NSLog(@"1========%@",[NSThread currentThread]);

    });

    dispatch_sync(self.serialQueue, ^{

        NSLog(@"2========%@",[NSThread currentThread]);

    });

    dispatch_sync(self.serialQueue, ^{

        NSLog(@"3========%@",[NSThread currentThread]);

    });

    NSLog(@"4========%@",[NSThread currentThread]);

}


/**

 串行队列 + 异步执行

 */

-(void)queue_taskTest2{

    dispatch_async(self.serialQueue, ^{

        NSLog(@"1========%@",[NSThread currentThread]);

    });

    dispatch_async(self.serialQueue, ^{

        NSLog(@"2========%@",[NSThread currentThread]);

    });

    dispatch_async(self.serialQueue, ^{

        NSLog(@"3========%@",[NSThread currentThread]);

    });

    NSLog(@"4========%@",[NSThread currentThread]);

}


/**

 并行队列 + 同步执行

 */

-(void)queue_taskTest3{

    dispatch_sync(self.concurrentQueue, ^{

        NSLog(@"1========%@",[NSThread currentThread]);

    });

    dispatch_sync(self.concurrentQueue, ^{

        NSLog(@"2========%@",[NSThread currentThread]);

    });

    dispatch_sync(self.concurrentQueue, ^{

        NSLog(@"3========%@",[NSThread currentThread]);

    });

    NSLog(@"4========%@",[NSThread currentThread]);

}


/**

 并行队列 + 异步执行

 */

-(void)queue_taskTest4{

    dispatch_async(self.concurrentQueue, ^{

        NSLog(@"1========%@",[NSThread currentThread]);

    });

    dispatch_async(self.concurrentQueue, ^{

        NSLog(@"2========%@",[NSThread currentThread]);

    });

    dispatch_async(self.concurrentQueue, ^{

        NSLog(@"3========%@",[NSThread currentThread]);

    });

    NSLog(@"4========%@",[NSThread currentThread]);

}


执行结果分别是:
串行队列 + 同步执行:同步执行不具备开辟新线程的能力,全部在当前线程顺序执行

2017-09-14 11:55:15.666 GCDTest[34886:62953482] 1========<NSThread: 0x600000079840>{number = 1, name = main}

2017-09-14 11:55:15.666 GCDTest[34886:62953482] 2========<NSThread: 0x600000079840>{number = 1, name = main}

2017-09-14 11:55:15.666 GCDTest[34886:62953482] 3========<NSThread: 0x600000079840>{number = 1, name = main}

2017-09-14 11:55:15.667 GCDTest[34886:62953482] 4========<NSThread: 0x600000079840>{number = 1, name = main}

串行队列 + 异步执行:异步执行具备开辟新线程的能力,并且串行队列必须等到前一个任务执行完才能开始执行下一个任务,同时,异步执行会使内部函数率先返回,不会与正在执行的外部函数发生死锁。

2017-09-14 11:56:23.080 GCDTest[34920:62956523] 4========<NSThread: 0x608000078300>{number = 1, name = main}

2017-09-14 11:56:23.080 GCDTest[34920:62956596] 1========<NSThread: 0x600000262fc0>{number = 3, name = (null)}

2017-09-14 11:56:23.080 GCDTest[34920:62956596] 2========<NSThread: 0x600000262fc0>{number = 3, name = (null)}

2017-09-14 11:56:23.081 GCDTest[34920:62956596] 3========<NSThread: 0x600000262fc0>{number = 3, name = (null)}

并行队列 + 同步执行:同步执行不具备开辟新线程的能力,并且Block函数执行完成后dispatch函数才会返回。

2017-09-14 11:56:49.052 GCDTest[34942:62958026] 1========<NSThread: 0x6000000765c0>{number = 1, name = main}

2017-09-14 11:56:49.053 GCDTest[34942:62958026] 2========<NSThread: 0x6000000765c0>{number = 1, name = main}

2017-09-14 11:56:49.053 GCDTest[34942:62958026] 3========<NSThread: 0x6000000765c0>{number = 1, name = main}

2017-09-14 11:56:49.053 GCDTest[34942:62958026] 4========<NSThread: 0x6000000765c0>{number = 1, name = main}

并行队列 + 异步执行:开辟了多个线程,执行任务的顺序是随机的

2017-09-14 11:57:13.576 GCDTest[34956:62959139] 1========<NSThread: 0x60000026cf00>{number = 3, name = (null)}

2017-09-14 11:57:13.576 GCDTest[34956:62959084] 4========<NSThread: 0x600000260240>{number = 1, name = main}

2017-09-14 11:57:13.576 GCDTest[34956:62959141] 3========<NSThread: 0x60800026b080>{number = 5, name = (null)}

2017-09-14 11:57:13.576 GCDTest[34956:62959138] 2========<NSThread: 0x60800026afc0>{number = 4, name = (null)}


原创粉丝点击