GCD

MARK:并发队列,异步执行

-(void)gcdDemo3{

//1.队列-并发 DISPATCH_QUEUE_CONCURRENT 并发

dispatch_queue_t  q = dispatch_queue_create("cc_queue",DISPATCH_QUEUE_CONCURRENT);

//2.异步执行任务

for(int i = 0;i < 10;i++){

dispatch_async(q,^{

NSLog(@"%@ %d",[NSThread currentThread],i);

});

}

NSLog(@"come here");

}


/*

问题:

1.会开几条线程?

会开多条线程,线程数量是由GCD来决定

2.会顺序执行吗?

不会

3.come here的位置?

不确定,一般会靠上的位置

*/


MARK:并发队列,同步执行

-(void)gcdDemo4{

//1.队列-并发 DISPATCH_QUEUE_CONCURRENT 并发

dispatch_queue_t  q = dispatch_queue_create("cc_queue",DISPATCH_QUEUE_CONCURRENT);

//2.同步执行任务

for(int i = 0;i < 10;i++)

{

dispatch_sync(q,^{

NSLog(@"%@ %d",[NSThread currentThread],i);

});

}

NSLog(@"come here");

}

1.会开多条线程?

不会

2.会顺序执行吗?

顺序

3.come here的位置?

最后

对比串行队列同步任务 和 并发队列同步任务

2者之间的结果是一样的。只要同步执行,不管是串行还是并行都是 一样的。

同步执行:不会到线程池里面去获取子线程

异步执行:只要有任务,就会到线程池取子线程(主队列除外)

mainQueue是顺序执行

小结

开不开线程,取决去任务的函数,同步不开,异步才能开;

开几条线程,取决于队列,串行开一条,并发可以开多条(异步执行)

你可能感兴趣的:(GCD)