Dispatch

Dispatch结合语言特性,运行时,和系统的特点,提供了系统的,全面的高层次API来提升多核多线程编程的能力。

Dispatch会自动的根据CPU的使用情况,创建线程来执行任务,并且自动的运行到多核上,提高程序的运行效率。对于开发者来说,在GCD层面是没有线程的概念的,只有队列(queue)。任务都是以block的方式提交到对列上,然后GCD会自动的创建线程池去执行这些任务。

这里称作对列队列是一个FIFO数据结构,意味着先提交到队列的任务会先开始执行)。DispatchQueue背后是一个由系统管理的线程池。

最简单的,可以按照以下方式初始化一个队列

//这里的名字能够方便开发者进行Debug
let queue = DispatchQueue(label: "com.Leo.demoQueue")
//这样就创建了一个自己的队列,可以向它提交任务闭包

Sync和Async

提交任务的函数,async阻塞当前线程

还有DispatchQueue.global().asyncAfter(deadline: deadline){ }  提交晚一点执行

Qos

任务或者队列的优先级

User Interactive 和用户交互相关,比如动画等等优先级最高。比如用户连续拖拽的计算
User Initiated 需要立刻的结果,比如push一个ViewController之前的数据计算
Utility 可以执行很长时间,再通知用户结果。比如下载一个文件,给用户下载进度。
Background 用户不可见,比如在后台存储大量数据

Semaphore

DispatchSemaphore是传统计数信号量的封装,用来控制资源被多任务访问的情况。

还可以使一个变量线程安全:

使用GCD,队列同步有另外一种方式 - sync,讲属性的访问同步到一个queue上去,就能保证在多线程同时访问的时候,线程安全。

dataQueue.sync { privateData = newValue}

Barrier

以barrier flag提交的任务能够保证其在并行队列执行的时候,是唯一的一个任务。(只对自己创建的队列有效,对gloablQueue无效)

典型的场景就是往NSMutableArrayaddObject

原文链接:https://blog.csdn.net/hello_hwc/article/details/54293280

最新文章

  1. java中 用telnet 判断服务器远程端口是否开启
  2. Android应用反破解的思路
  3. python 线程之_thread
  4. CentOS6.5菜鸟之旅:VIM插件NERDtree初探
  5. PHP回调函数的几种用法
  6. URL地址中的转义符
  7. 从零开始学android开发-通过WebService进行网络编程,使用工具类轻松实现
  8. poj2400Supervisor, Supervisee(KM)
  9. 自定义View-6 状态按钮 滑动 点击
  10. 海量数据挖掘MMDS week7: 相似项的发现:面向高相似度的方法
  11. 牛客小白D题(STL的迭代器)
  12. (转)WebSocket学习
  13. [转]RabbitMQ系列(一):Windows下RabbitMQ安装及入门
  14. css 边距等常用设置
  15. Analysis of single cell RNA-seq data(单细胞终极课程)
  16. [html] 回到页首
  17. maven快速入门之安装
  18. NOIP 2014 提高组 Day2
  19. 【论文笔记】Leveraging Datasets with Varying Annotations for Face Alignment via Deep Regression Network
  20. Python线程event

热门文章

  1. 剑指offer 把字符串转化为整数
  2. Day4 - I - Trucking HDU - 2962
  3. 新闻类网站的通用爬虫--GNE
  4. 树莓派1 安装使用 ZeroTier
  5. Ubuntu18.04 LTS 搭建Cassandra集群
  6. window安装dlib、face_recognition
  7. 关于cvPyrSegmentation(src, dst, storage, &comp, level, threshold1, threshold2)函数报错的问题解答
  8. Visual Studio Code 断点调试配置方法(请按我的步骤 一定可以做到)
  9. [转]Spark SQL2.X 在100TB上的Adaptive execution(自适应执行)实践
  10. Aspen安装过程报错总结