什么是 GCD?!

GCD就是一个函数库(废话)

用来压榨系统的资源,解决多线程处理中一些问题的库(知道这个就够了,很多电影角色都是因为知道太多死得很惨!!!!!)

1.并发与并行 Concurrency vs Parallelism 

单核设备:先运行一个线程,执行一个上下文切换。这通常切换很快以致给我们有并发执行地错觉。也就是说在一秒钟内吃了饭也拉了屎,可是每半秒中只能做一件事情(吃饭或拉屎)但是给人的感觉好像是同时进行的。这是单核逻辑模拟出两个线程的假象如下图Concurrency所示;

多核设备:通过并行来同时执行多个线程。也就是一次同时干两件事如我有两个老婆(CPU),一个给我捏背,一个喂我吃葡萄双重享受同时进行,这就不会只有一个老婆她的任务总是切换来切换去累个半死。

互斥:进程间相互排斥的使用临界资源的现象。用上边两老婆的例子解释一下,就是捏背的不想捏背想喂你吃葡萄,可是你只有一张嘴。

2. 同步与异步 Synchronous vs asynchronous 

同步:同步就是顺序执行一个完了下一个执行,任务与任务之间具有相互依赖的关系,就是前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待。也就是说脱光衣服洗澡,没热水,除了光了身子傻等热水什么都不能做。具有同步关系的一组并发进程相互发送的信息称为消息或事件。继续上边的例子,也就是说脱光衣服洗澡一件事,来热水一件事,脱光衣服的你告诉烧锅炉的来热水叫消息或事件。

异步:异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。线程就是实现异步的一个方式。异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情。说了那么多就是一只手(线程)撸管另一个手(多线程)拿卫生纸的事情。
   异步和多线程并不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段。异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事情。实现异步可以采用多线程技术或则交给另外的进程来处理。这句自己邪恶的理解吧。

 3.Serial Queues 串行队列

一次只执行一个任务,并且按照我们添加到队列的顺序来执行,FIFO先进先出。

4.Concurrent Queues 并发队列

在并发队列中的任务能得到的保证是它们会按照被添加的顺序开始执行但任务可能以任意顺序完成,你不会知道何时开始运行下一个任务,或者任意时刻有多少 Block 在运行。这完全取决于 GCD 。下图Block 0 1 2 3 是添加顺序,但由于处理的内容不同系统分配不同的资源去处理所以完成的时间不同,处理有些快慢结束时间这个不是猿类能够控制的。但是GCD提供(Queue Types 队列类型)一种队列处理的优先等级来保证尽量同步完成,其实还是没什么保证,不过有总比没有强。

注意 在 Block 0 开始后,其他的任务等待Block 0完成后才开始。 Block 3 比 Block 2 晚一点,但它先于 Block 2 完成。
  
何时开始一个 Block 完全取决于 GCD 。如果一个 Block 的执行时间与另一个重叠,也是由 GCD 来决定是否将其运行在另一个不同的核心上,如果那个核心可用,否则就用上下文切换的方式来执行不同的 Block 。也就说用GCD不用考虑多核的问题,系统帮你考虑。
 
 

最新文章

  1. gradle添加依赖
  2. [转载]反无人机企业DroneShield利用声音识别侦测无人机
  3. ajax回调打开新窗体防止浏览器拦截有效方法
  4. sourceforge免费空间申请及使用笔记
  5. 关于前置式递增和后置式递增的小知识(++x与x++)
  6. C/C++常用头文件及函数汇总
  7. JVM工作原理和特点
  8. CSS 设计模式一 元素
  9. Phalcon自动加载(PHP自动加载)
  10. 机器学习之K近邻算法(KNN)
  11. spring boot之从零开始开发自己的网站
  12. vue常考面试题
  13. linux指令(2)
  14. Python之旅Day13 JavaScript与DOM部分
  15. 尝试重新(多次反复)处理某个逻辑的示例(good)
  16. 阿里云ECS服务器购买流程 (自定义配置购买、按月、按量购买)教程
  17. Spring ActiveMQ Caused By: javax.jms.IllegalStateException: Connection closed
  18. EF5+MVC4系列(5) 删除的方法 1:系统推荐的先查询后remove删除的方法 2:自己new一个包含主键的类,然后 attach附加 remove删除;3:使用db.Entry 修改状态删除4:EntityState的几种状态
  19. C#里面BLL、Model、DAL、UI层
  20. 使用MaxCompute访问TableStore(OTS) 简明手册

热门文章

  1. vim中 set 用法设置
  2. 【英语魔法俱乐部——读书笔记】 2 中级句型-复句&合句(Complex Sentences、Compound Sentences)
  3. MFC 获取图像的大小
  4. Java 名词
  5. npm isArray源码
  6. mysql 存储过程 游标的使用
  7. HTTP认证机制(翻译)
  8. array_filter,匿名函数
  9. SeekBar 圆角问题
  10. C# 委托和事件 与 观察者模式(发布-订阅模式)讲解 by天命