zoukankan      html  css  js  c++  java
  • 再次学习GCD

    在cocoachina上看到一篇文章,今天学下。

    一、任务

    任务:线程中那个执行的代码段。

    执行任务分为两种:

    下面是我自己的想法,不知道对不对。

    同步:老鹰捉小鸡(游戏) -- 老鹰一次抓一个小鸡。
    异步:吃鸡游戏(各干各的) -- 大家一块

    1.sync(同步):等待队列的任务执行结束

    dispatch_sync(dispatch_queue_t,^{

    //执行代码  

    });

    NSLog(@"hello,sync");

    直白说就是:代码自行到dispatch_sync(),会执行Block块---blockSync(形参),

    blockSync执行结束后,执行NSLog,输出hello,sync!!!!

    2.async(异步):开启新线程

    dispatch_async(dispatch_queue_t,^{

    //执行代码 

    });

    NSLog(@"hello,async");

    直白说就是:代码执行到dispatch_async();会直接执行NSLog,输出hello,async!!!

    然后异步执行BlockL块blockAsync;

    二、队列----特殊的线性表,FIFO

    1.Serial Dispatch Queue(串行队列)

    一个接一个,五个一个窗口排队买票

    1.1创建方法

    1. dispatch_queue_t queue = dispatch_queue_create("net.bujige.testQueue", DISPATCH_QUEUE_SERIAL);

    2. 主队列

    dispatch_queue_t queue = dispatch_get_main_queue();

    2.Concurrent Dispatch Queue(并发队列)

    一起执行,五个人五个窗口买票

    2.1创建方法

    1. dispatch_queue_t queue = dispatch_queue_create("net.bujige.testQueue", DISPATCH_QUEUE_CONCURRENT);

    2. 全局并发队列

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    三、其他方法

    3.1  GCD 栅栏方法:dispatch_barrier_async

    在执行完栅栏前面的操作之后,才执行栅栏操作,最后再执行栅栏后边的操作

    3.2  GCD 延时执行方法:dispatch_after

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(),^{

    //延迟2s

    });

    3.3   GCD 一次性代码(只执行一次):dispatch_once

    单例创建

    3.4  GCD快速迭代方法:dispatch_apply

    3.5  GCD队列组:dispatch_group/dispatch_group_notify/dispatch_group_wait

    3.5.3 GCD    dispatch_group_enter/dipatch_group_leave

    3.6  GCD信号量  dispatch_semaphore

    3.6.1  Dispatch Semaphore线程同步

    3.6.2 Dispatch Semaphore线程安全和线程同步(为线程加锁)

    3.6.2.1 非线程安全(不使用 semaphore)

    3.6.2.2 线程安全(使用semaphore加锁)

        

  • 相关阅读:
    golang闭包,传统斐波那契
    ubuntu 软件桌面图标创建
    Mysql系列-性能优化神器EXPLAIN使用介绍及分析
    Sklearn-GridSearchCV网格搜索
    sklearn逻辑回归(Logistic Regression)类库总结
    scikit-learn模块学习笔记(数据预处理模块preprocessing)
    Python中的高级数据结构
    Python进阶之“属性(property)”详解
    python模块之itertools
    python list有关remove的问题
  • 原文地址:https://www.cnblogs.com/tom2015010203/p/8590907.html
Copyright © 2011-2022 走看看