线程GCD

作者: 我是好宝宝_6966 | 来源:发表于2018-08-22 15:50 被阅读0次

本文只是学习他人知识点进行一定的总结巩固自己的理解
学习GCD看我就够了
iOS多线程全套

一、多线程的定义

计算机在运行一段程序的时候,会把该程序的CPU命令列配置到内存中,然后按照顺序一个一个执行命令列,这样1个CPU执行的CPU命令列为一条无分叉路径就是线程。
而有多条这样的执行指令列的路径存在时即为多线程。

二、实现多线程的4种方法

  • pthreads
  • NSThread
  • GCD
  • NSOperation & NSOperationQueuef

三、GCD

一些定义

  • Dispatch Queue:执行处理的等待队列

    1. Serial Dispatch Queue (串行队列) ——等待现在执行中处理结束再加入队列
      只会当一个处理执行完了才会将下一个任务交给线程处理
    2. Concurre Dispatch Queue (并发队列) ——不等待现在执行中处理结束,直接加入队列
      不需要等待前一个任务执行,几乎是同时交给线程处理的
  • dispatch_queue_create 创建队列

  • 同步与异步
    1.dispatch_async:表示异步:将指定的Block“非同步”加入Dispatch Queue,不做任何等待
    2.dispatch_sync:表示同步:将指定的Block“同步”的加入Dispatch Queue,在Block结束之前,dispatch_sync函数会一直等待

  • 死锁:由于dispatch_sync会等待Block执行结束才会继续往下执行,所以会产生死锁的情况

dispatch_queue_t main_queue = dispatch_get_main_queue();
    dispatch_sync(main_queue, ^{
        NSLog(@"main queue");
    });
    NSLog(@"go on");

产生死锁的原因一般是 在串行队列中并且是在一个线程中同步往这个线程提交一个Block

  • Dispatch Group(派发分组)
    把任务分组。调用者在这组任务执行完毕后会得到通知,并做相应的处理。
    创建方式有两种:
    dispatch_group_t group = dispatch_group_create();
dispatch_group_enter(dispatch_group_t group);
dispatch_group_leave(dispatch_group_t group);

四、GCD的具体运用(更多使用可以看第二个链接)

//创建任务分组
dispatch_group_t group = dispatch_group_create();
//创建异步队列
dispatch_queue_t queue = dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT);

dispatch_group_enter(group);
dispatch_group_async(group, queue, ^{
    dispatch_group_leave(group);
});

//所有队列里的任务执行完的通知
dispatch_group_notify(group, queue, ^{
     dispatch_async(dispatch_get_main_queue(), ^{
            
     });
});

相关文章

  • 7.3 多线程-GCD

    多线程-GCD 多线程-GCD-串行并行 多线程-GCD.png GCD-线程的通讯、延时操作、定时器 GCD-线...

  • iOS多线程:『GCD』详尽总结

    iOS多线程:『GCD』详尽总结 iOS多线程:『GCD』详尽总结

  • GCD创建线程数的上限

    检查GCD线程池大小的代码 结果 推论: GCD最多只能新建64个线程,即GCD线程池大小为64。 64个线程编号...

  • GCD的使用

    GCD的详解iOS多线程--彻底学会多线程之『GCD』 GCD线程之间的通讯 一般在主线程里面刷新UI 点击、滚动...

  • 多线程之GCD

    线程、多线程 多线程存在的问题 为什么使用多线程? GCD GCD 的 API 介绍Dispatch QueueD...

  • 关于多线程笔记

    1.GCD线程延迟 2.GCD后台执行 3.GCD主线程执行 4.GCD一次性执行

  • 多线程(二) ---> GCD的理解与使用

    1. GCD的特点 GCD会自动利用更多的CPU内核 GCD自动管理线程的生命周期(创建线程,调度任务,销毁线程...

  • 多线程之1-GCD(DispatchQueue)

    GCD的特点 GCD会自动利用更多的CPU内核 GCD自动管理线程的生命周期(创建线程,调度任务,销毁线程等) 只...

  • GCD控制线程数量

    1.GCD控制线程数量 2.GCD控制线程数量+线程任务结束通知处理

  • iOS 多线程

    iOS 多线程有几种方式 GCD NSOpeartion NSThread phread 多线程 GCD disp...

网友评论

      本文标题:线程GCD

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