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、坚持不要脸
  • 相关阅读:
    在Windows平台上安装Node.js及NPM模块管理
    MySQL远程访问授权
    JSON (仅限本地)
    Json 调用 天气API 实例
    JS调用腾讯接口获取天气
    jsonp 调用天气API
    兼容性
    MySql like模糊查询使用详解
    编绎报错,解决方法objc_msgSend too many arguments to function call,expected 0, have3 (转)
    OC中ARC forbids explicit message send of release错误(转)
  • 原文地址:https://www.cnblogs.com/xulinmei/p/7380055.html
Copyright © 2011-2022 走看看