GCD的使用
一:队列
1.串行队列:添加到队列中的任务是一个一个执行的
2.并行(发)队列:添加到队列中的任务是多个同时执行的(一个队列中的多个任务可以同时执行)
3.主队列:里面的任务都是在主线程执行的,可以理解为主队列就是串行队列的一种
4.全局队列:并行(发)队列
二:同步、异步
1、同步:需要后面的任务等待,不会开启新的线程,会直接使用当前的线程
2、异步:不需要后面的任务等待,会开启新的线程
//——————————异步,并行—————————————
dispatch_queue_t queue2 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
/*------------------------向并行(发)队列添加任务------------------------*/
//(1)异步添加任务
/*
首先这是异步添加-->很可能会开启多线程
然后是并行队列-->意味着一个队列里的任务可以一起进行
*/
dispatch_async(queue2, ^{ //异步添加---开启多线程
for (int i=0; i<50; i++) {//-------®1
NSLog(@"1....i:%d",i);
}
});
for (int i=0; i<150/*或i < 50*/; i++) { //----------®2
NSLog(@"??....i:%d",i);//i < 50情况时:®2 和 ®1 会交替执行,i<50很快执行完了,但是 ®1的i还没执行完, ®3 和 ®1是并行的所以会在®1 还没结束(®2结束了,®3加入队列) ®3 就开始执行了
// i < 150 情况时:®1 和 ®2会混合,然后®2 打印执行完 ®3才加入队列中
}
dispatch_async(queue2, ^{//-------------®3
for (int i=0; i<50; i++) {
NSLog(@"2....i:%d",i);
}
});
代码:
多线程GCD的基本使用以及注意点
原文:http://www.cnblogs.com/chillytao-suiyuan/p/4834131.html