多线程GCD的基本使用以及注意点

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);
            }
    });
 
代码:
 
 
posted @ 2015-09-24 08:01  了解2号  阅读(238)  评论(0)    收藏  举报