iOS底层探索之多线程(三)—初识GCD

50 篇文章 6 订阅
18 篇文章 3 订阅

回顾

在前两篇博客,已经介绍了进程线程,还介绍了自旋锁互斥锁等相关内容,在 iOS 开发中,使用最多的还是 GCD,那么从本篇开始讲陆续介绍 GCD

在这里插入图片描述

iOS底层探索之多线程(一)—进程和线程

iOS底层探索之多线程(二)—线程和锁

1. 什么是 GCD

GCD定义

Grand Center Dispatch简称GCD,是苹果公司开发的技术,以优化应用程序支持多核心处理器。

  • C语言,提供了非常多期待的函数。
  • GCD是苹果公司为多核的并行运算出的解决方案。
  • GCD会自动利用更多的CPU内核(比如双核、四核) ,GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)
  • 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码。

GCD将任务添加到队列,并且指定执⾏任务的函数

GCD工作原理

GCD的两个核心:任务队列

2. 任务和队列

任务:需要执行什么操作
队列:用来存放任务的

GCD使用的两个步骤:创建任务、将任务添加到队列

  • 创建任务:确定要做的事情
  • 将任务添加到队列中
    • GCD会自动将队列中的任务取出来,放到对应的线程中去执行。
    • 任务的取出遵循FIFO原则:先进先出,后进后出。

FIFO原则:先进先出,后进后出

串行队列

串行队列(Serial Dispatch Queue),任务一个接着一个的执行,一个任务执行完毕后,再执行下一个任务,串行队列是顺序执行的。

  • 串行队列示意图:
    串行队列
并发队列

并发队列(Concurrent Dispatch Queue),可以让多个任务并发(同时)执行,自动开启多个线程同时执行任务。

并发功能只有在异步(dispatch_async)函数下才有效。

  • 并发队列示意图:
    并发队列
    并发队列,先调度执行的不一定先执行完成,这和 CPU分配的时间有关系,还和任务的大小有关,在分配的时间内没有完成,CPU:老铁你先靠边站会,让下一个哥们先执行,下次分配到你时间再继续执行吧。

3. 函数

  • 任务使用 block封装
  • 任务的block没有参数也没有返回值
  • 执行任务的函数

异步dispatch_async

  • 不用等待当前语句执行完毕,就可以执行下一条语句
  • 会开启线程执行 block的任务
  • 异步是多线程的代名词

同步dispatch_sync

  • 必须等待当前语句执行完毕,才会执行下一条语句
  • 不会开启线程
  • 在当前执行block的任务

(1) 让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务 。

(2) 一个任务可以是一个函数,是一个闭包体GCD的底层此意使 用线程实现的,不过这样可以让程序员不用关注实现的细节。

(3) GCD中必须要使用的是各种队列,我们遇过block,把具体的代码放到队列中,队列中的任务排队执行,系统会自动的把队列中的具体任务分配到具体的线程中和CPU中(如果是多核处理器),具体创建多少个线程,分配到哪个线程都是由系统管理

更多内容持续更新

🌹 喜欢就点个赞吧👍🌹

🌹 觉得有收获的,可以来一波,收藏+关注,评论 + 转发,以免你下次找不到我😁🌹

🌹欢迎大家留言交流,批评指正,互相学习😁,提升自我🌹

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡卡西Sensei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值