美文网首页
GCD 个人理解

GCD 个人理解

作者: 磊简单 | 来源:发表于2018-08-23 11:11 被阅读0次

GCD精讲(Swift 3&4)做的笔记

gcd 让开发人员由面向线程编程编为面向队列编程。

队列: 同步队列、异步队列
提交任务的方式:同步提交、异步提交

iOS 默认提供两种队列
1、主队列
获取方式:

dispatch_get_main_queue()

程序默认运行的队列,串行队列。
2、全局队列
获取方式

dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)

第一个参数为优先级,第二个参数是预留字段添0就行

组合方式

串行队列+同步提交
同步提交会阻塞当前线程,任务会提交到被提交队列顺序执行。
情况分析

- (void)viewDidLoad {
    [super viewDidLoad];
    // 当前队列main_queue
    // 同步提交任务阻塞当前线程
    // 同时主队列中viewDidLoad正在执行被阻塞,所以提交的任务永远得在排队中,所以main_queue永远阻塞
    dispatch_sync(dispatch_get_main_queue(), ^{
        NSLog(@"…………");
    });
}

串行队列+异步提交
异步提交当前队列会继续执行,任务会被提交到串行队列中顺序执行。
并行队列+同步提交
同步提交会阻塞当前线程,任务会提交到被提交队列无序执行。
情况分析

- (void)viewDidLoad {
    [super viewDidLoad];
    dispatch_queue_t curQue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    NSThread *thread1 = [[NSThread alloc]initWithBlock:^{
        NSLog(@"%@",[NSThread currentThread]);
        dispatch_sync(curQue, ^{
            NSLog(@"4%@",[NSThread currentThread]);
            sleep(5);
            NSLog(@"4%@",[NSThread currentThread]);
        });
    }];
    NSThread *thread2 = [[NSThread alloc]initWithBlock:^{
        NSLog(@"%@",[NSThread currentThread]);
        dispatch_sync(curQue, ^{
            NSLog(@"5%@",[NSThread currentThread]);
            sleep(5);
            NSLog(@"5%@",[NSThread currentThread]);
        });
    }];
    [thread1 start];
    [thread2 start];
}
2019-12-26 16:05:40.758442+0800 Test[91671:3782274] <NSThread: 0x6000015b3dc0>{number = 4, name = (null)}
2019-12-26 16:05:40.758444+0800 Test[91671:3782273] <NSThread: 0x6000015b3e80>{number = 3, name = (null)}
2019-12-26 16:05:40.758696+0800 Test[91671:3782273] 4<NSThread: 0x6000015b3e80>{number = 3, name = (null)}
2019-12-26 16:05:40.758715+0800 Test[91671:3782274] 5<NSThread: 0x6000015b3dc0>{number = 4, name = (null)}
2019-12-26 16:05:45.765281+0800 Test[91671:3782273] 4<NSThread: 0x6000015b3e80>{number = 3, name = (null)}
2019-12-26 16:05:45.765281+0800 Test[91671:3782274] 5<NSThread: 0x6000015b3dc0>{number = 4, name = (null)}

并行队列+异步提交
既不阻塞线程,也无固定顺序

相关文章

  • GCD 个人理解

    看GCD精讲(Swift 3&4)做的笔记 gcd 让开发人员由面向线程编程编为面向队列编程。 队列: 同步队列、...

  • iOS GCD线程

    关于GCD线程,个人理解也不是非常的透彻,只是谈一谈自己的看法 GCD是Grand Central Dispatc...

  • GCD相关知识点

    GCD相关知识点 多线程技术--GCD 深入学习GCD GCD 深入理解:第一部分 GCD 深入理解:第二部分 1...

  • 多线程系列文章

    GCD基础篇 - 同步、异步,并发、并行的理解 GCD中级篇 - dispatch_group的理解及使用 dis...

  • GCD理解

    Dispatch Queues的生成可以有这几种方式: 1.dispatch_queue_tqueue=dispa...

  • 理解GCD

    (1)博客:深入理解GCD 理解iOS中的线程池 多线程理解 ?:(1)信号量--...

  • 面试问题总结

    Runtime理解。 Runloop理解,结合计时器。 GCD常用的方法。 GCD的原理。 KVO和KVC的实现原...

  • GCD 深入理解:第一部分

    GCD 深入理解:第一部分 什么是 GCD GCD 是 libdispatch 的市场名称,而 libdispat...

  • iOS笔记--GCD相关知识

    GCD相关知识 1.GCD(Grand Central Dispatch)教程 2.GCD 深入理解:第一部分 备...

  • GCD之基础

    深入理解 GCD(一) - 博客 - 伯乐在线

网友评论

      本文标题:GCD 个人理解

      本文链接:https://www.haomeiwen.com/subject/otlpiftx.html