文档章节

第01天多线程网络:(12):GCD基本概念

宇鸿165
 宇鸿165
发布于 2017/04/17 10:09
字数 642
阅读 4
收藏 0
一、简介
 什么是GCD
 全称 Grand Central Dispatch, 可译为"牛逼的中枢调度器"
 纯C语言,提供了非常多强大的函数
 
 GCD的优势
 GCD是苹果公司为多核的并行运算提出的解决方案
 GCD会自动利用更多的CPU内核(比如双核、四核)
 GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)
 程序员只需要告诉GCD想要执行什么任务,不嫌要编写任何线程管理代码

#####二、任务和队列

 GCD有2个核心概念 
 任务: 执行什么操作
 队列: 用来存放任务
 
 GCD的使用就2个步骤
 定制任务
 确定想做的事情
 
 将任务添加队里中
 GCD会自动将队列中的任务取出,放到对应的线程执行
 任务的取出遵循队列的FIFO原则:先进先出,后进后出
 
 栈(先进后出)只有一个口
 队列(先进先出,后进后出)有两个口

#####三、执行任务

 GCD中有2个用来执行队列任务的常用函数
 用同步的方式执行任务 sync
 dispatch_sync(<#dispatch_queue_t  _Nonnull queue#>, <#^(void)block#>)
queue : 队列
block : 任务
 
 用异步的方式执行任务 async
 dispatch_async(<#dispatch_queue_t  _Nonnull queue#>, <#^(void)block#>)

 同步和异步的区别 
 同步 : 只能在当前线程中执行任务, 不具备开启新线程的能力
 异步 : 可以在新的线程中执行任务, 具备开启新线程的能力
 ```
 
#####五、队列的类型
```
  GCD的队列可以分为2大类型
 并发队列(Concurrent Dispatch Queue)
 可以让多个任务并发(同时)执行(自动开启多个线程同时执行任务)
 并发功能只有在异步(dispatch_async)函数才有效
 
 串行队列(serial Dispatch Queue)
 让任务一个接着一个地执行(一个任务执行完毕后,再执行下一个任务)
 ```
 #####六、容易混淆的术语
```
 有4个术语比较容易混淆 : 同步、异步、并发、串行
 同步和异步主要影响 : 能不能开启新的线程
 同步 : 只能在当前线程中执行任务, 不具备开启新线程的能力
 异步 : 可以在新的线程中执行任务, 具备开启新线程的能力
 
 并发和串行主要影响 : 任务的执行方式
 并发 :  可以让多个任务并发(同时)执行
 串行 :  一个任务执行完毕后,再执行下一个任务
```

© 著作权归作者所有

宇鸿165
粉丝 1
博文 919
码字总数 368963
作品 0
广州
私信 提问
GCD介绍(一): 基本概念和Dispatch Queue

什么是GCD? Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写。从基本功能上讲,GCD有点像NSOperationQueue,他们都允许程序将任务切分为多个单一任务...

于赟
2012/11/04
247
0
2019 iOS面试题总结(题目及答案已上传Githup)

Objective_C语言特性 一、分类 二、扩展 三、代理(Delegate) 四、通知(NSNotification) 五、KVO (Key-value observing) 六、KVC(Key-value coding) 七、属性关键字 runloop 一、RunLoop...

iOS开发_小迷糊
06/24
0
0
多线程的底层实现机制

1.多线程的底层实现 (1)首先回答什么是线程 1个进程要想执行任务,必须得有线程.线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 (2)什么是多线程 1个进程中可以开...

万能的匹诺曹
2016/06/22
43
0
转载--大神的“思想”

1、基本概念 什么是进程: 进程是在系统运行的一个程序,每个进程之间是独立的,每个进程均运行在其专有且受保护的内存空间内。 什么是线程: 一个进程想要执行任务,必须得有线程(至少一个...

细雨微风轻诉流年
2016/09/06
21
0
iOS之多线程:线程的生命周期,NSThread、GCD、NSOperation的使用与总结

前言: 我负责努力,其余交给运气。 正文: 闲暇之余,把线程的问题整理一下,感觉可能会有点长,所以先自分一下章节,我将会按照以下几个小节来展开描述: 1.多线程的基本概念 2.线程的状态...

陌路卖酱油
06/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
4
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
3
0
Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
7
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
7
0
Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

本文为Flutter开发环境在macOS下安装全过程: 一、系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不包含 IDE 或其余...

過愙
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部