zoukankan      html  css  js  c++  java
  • ios d多线程

    队列: 

    队列是存放待处理模块的方式,需要开线程去执行。

    1、Dispatch Queue:将要执行的任务追加到Dispatch Queue队列中

     注:Queue需手动释放(一般给block持有,出block自动释放)

    Dispatch_async(queue,^{
        /*
        **想执行的任务
        */
    });
     
    1.1、Serial Diapatch Queue 等待队列: 

             等待上一步执行结束才执行下一个步骤,同步,一般是单线程来处理

    线程0
    Blk0
    Blk1 
    Blk2
    Blk3 
     

    创建:

    1.  通过GCD的API:dispatch_queue_create

        指定参数为:NULL
                     dispatch_queue_t SerialQueue = dispatch_queue_create("my.Serial .queue", NULL);

     

    Concurrent Diapatch Queue 不等待队列:

                     不需要等待上一个步骤操作完才进行下一个,异步,一般是多线程来处理

     

    线程0 线程1 线程2
    Blk0 Blk2 Blk1
    Blk3 Blk5 Blk4
     
     
    创建:

    1、通过GCD的API:dispatch_queue_create

    指定参数为:DISPATCH_QUEUE_CONCURRENT
              dispatch_queue_t concurrentQueue = dispatch_queue_create("my.concurrent.queue", DISPATCH_QUEUE_CONCURRENT);
     
     
     
    对于那些对同一块数据处理的操作可以使用单线程同步队列或者多线程加锁
     
     
      1. 1. 1 Dispacth _sync( )同步添加操作。他是等待添加进队列里面的操作完成之后再继续执行。
        dispatch_queue_t concurrentQueue = dispatch_queue_create("my.concurrent.queue", DISPATCH_QUEUE_CONCURRENT);
            NSLog(@"1");
            dispatch_sync(concurrentQueue, ^(){
                NSLog(@"2");
                [NSThread sleepForTimeInterval:10];
                NSLog(@"3");
            });
            NSLog(@"4");
        输出 :      
        11:36:25.313 GCDSeTest[544:303] 1
        11:36:25.313 GCDSeTest[544:303] 2
        11:36:30.313 GCDSeTest[544:303] 3//模拟长时间操作
        11:36:30.314 GCDSeTest[544:303] 4
      2. 2. 2 Dispacth_async()异步添加进任务队列,它不会做任何等待
          dispatch_queue_t concurrentQueue = dispatch_queue_create("my.concurrent.queue", DISPATCH_QUEUE_CONCURRENT);
            NSLog(@"1");
            dispatch_async(concurrentQueue, ^(){
                NSLog(@"2");
                [NSThread sleepForTimeInterval:5];
                NSLog(@"3");
            });
            NSLog(@"4");
        输出:
         11:42:43.820 GCDSeTest[568:303] 1
         11:42:43.820 GCDSeTest[568:303] 4
         11:42:43.820 GCDSeTest[568:1003] 2
         11:42:48.821 GCDSeTest[568:1003] 3//模拟长时间操作时间
    成功的三大原则: 1、坚持 2、不要脸 3、坚持不要脸
  • 相关阅读:
    c++基类和派生类的框架
    从文件读入7个数并排序
    字符串复制函数-简单
    c++函数模板-简单
    用初始化列表解决常私有变量问题-简单
    分配和释放内存-简单
    结构体小程序-简单
    转化的力量
    初次创业需要注意的几点
    重生的2014下半年的起点
  • 原文地址:https://www.cnblogs.com/xulinmei/p/7380055.html
Copyright © 2011-2022 走看看