基本概念和Dispatch Queue
来源:互联网 发布:生产管理者常用数据 编辑:程序博客网 时间:2024/05/29 18:48
iOS的三种多线程技术
以上这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple最推荐使用的,在项目中很多框架技术分别使用了不同多线程技术。
2.三种多线程技术的对比
什么是GCD?
Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写。从基本功能上讲,GCD有点像NSOperationQueue,他们都允许程序将任务切分为多个单一任务然后提交至工作队列来并发地或者串行地执行。GCD比之NSOpertionQueue更底层更高效,并且它不是Cocoa框架的一部分。
除了代码的平行执行能力,GCD还提供高度集成的事件控制系统。可以设置句柄来响应文件描述符、mach ports(Mach port 用于 OS X上的进程间通讯)、进程、计时器、信号、用户生成事件。这些句柄通过GCD来并发执行。
GCD的API很大程度上基于block,当然,GCD也可以脱离block来使用,比如使用传统c机制提供函数指针和上下文指针。实践证明,当配合block使用时,GCD非常简单易用且能发挥其最大能力。
你可以在Mac上敲命令“man dispatch”来获取GCD的文档。
为何使用?
GCD提供很多超越传统多线程编程的优势:
- 易用: GCD比之thread跟简单易用。由于GCD基于work unit而非像thread那样基于运算,所以GCD可以控制诸如等待任务结束、监视文件描述符、周期执行代码以及工作挂起等任务。基于block的血统导致它能极为简单得在不同代码作用域之间传递上下文。
- 效率: GCD被实现得如此轻量和优雅,使得它在很多地方比之专门创建消耗资源的线程更实用且快速。这关系到易用性:导致GCD易用的原因有一部分在于你可以不用担心太多的效率问题而仅仅使用它就行了。
- 性能: GCD自动根据系统负载来增减线程数量,这就减少了上下文切换以及增加了计算效率。
Dispatch Objects
尽管GCD是纯c语言的,但它被组建成面向对象的风格。GCD对象被称为dispatch object。Dispatch object像Cocoa对象一样是引用计数的。使用dispatch_release和dispatch_retain函数来操作dispatch object的引用计数来进行内存管理。但主意不像Cocoa对象,dispatch object并不参与垃圾回收系统,所以即使开启了GC,你也必须手动管理GCD对象的内存。
Dispatch queues 和 dispatch sources(后面会介绍到)可以被挂起和恢复,可以有一个相关联的任意上下文指针,可以有一个相关联的任务完成触发函数。可以查阅“man dispatch_object”来获取这些功能的更多信息。
Dispatch Queues
GCD的基本概念就是dispatch queue。dispatch queue是一个对象,它可以接受任务,并将任务以先到先执行的顺序来执行。dispatch queue可以是并发的或串行的。并发任务会像NSOperationQueue那样基于系统负载来合适地并发进行,串行队列同一时间只执行单一任务。
GCD中有三种队列类型:
- The main queue: 与主线程功能相同。实际上,提交至main queue的任务会在主线程中执行。main queue可以调用dispatch_get_main_queue()来获得。因为main queue是与主线程相关的,所以这是一个串行队列。
- Global queues: 全局队列是并发队列,并由整个进程共享。进程中存在三个全局队列:高、中(默认)、低三个优先级队列。可以调用dispatch_get_global_queue函数传入优先级来访问队列。
- 用户队列: 用户队列 (GCD并不这样称呼这种队列, 但是没有一个特定的名字来形容这种队列,所以我们称其为用户队列) 是用函数
dispatch_queue_create
创建的队列. 这些队列是串行的。正因为如此,它们可以用来完成同步机制, 有点像传统线程中的mutex。
- 基本概念和Dispatch Queue
- 基本概念和Dispatch Queue
- GCD基本概念和Dispatch Queue
- GCD介绍: 基本概念和Dispatch Queue
- GCD介绍(一):基本概念和Dispatch Queue
- GCD介绍(一):基本概念和Dispatch Queue
- GCD介绍(一):基本概念和Dispatch Queue
- GCD介绍(一):基本概念和Dispatch Queue
- GCD 的基本概念和Dispatch Queue
- GCD介绍(一):基本概念和Dispatch Queue
- GCD介绍: 基本概念和Dispatch Queue
- GCD介绍: 基本概念和Dispatch Queue
- GCD介绍(一):基本概念和Dispatch Queue
- GCD介绍: 基本概念和Dispatch Queue
- GCD介绍(一):基本概念和Dispatch Queue
- GCD介绍: 基本概念和Dispatch Queue
- GCD简介一:基本概念和Dispatch Queue
- GCD介绍: 基本概念和Dispatch Queue
- 编译原理与编译构造 由语言构造文法1
- Java 集合框架ArrayList 储存自定义数组
- 简述malloc/free和new/delete区别
- 移动webapp的那些bug
- 决策树算法详解(1)
- 基本概念和Dispatch Queue
- 欢聚时代2017校招笔试题目(JAVA基础类)A卷--8
- html常用代码大全
- Android图片加载框架最全解析(五),Glide强大的图片变换功能
- Python面向对象编程(类和实例 访问限制 继承和多态 获取对象信息 实例属性和类属性)
- JVM内存模型
- Java和Scala学习日记8
- Java程序员成神列表
- 51nod 1799 二分答案(分块打表+组合数)