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加锁)

        

  • 相关阅读:
    JS LeetCode 1423. 可获得的最大点数简单题解
    SpringBoot 学集 (第六章) Docker
    Linux 学记 (第三章)
    Linux 学记 (第二章)
    Linux 学记 (第一章)
    SpringBoot 学集 (第五章) Web开发续
    SpringBoot 学集 (第四章)Web开发
    SpringBoot 学集 (第三章) 日志框架
    SpringBoot 学集 (第二章) 配置文件
    SpringBoot 学集 (第一章)
  • 原文地址:https://www.cnblogs.com/tom2015010203/p/8590907.html
Copyright © 2011-2022 走看看