浅入了解GCD 并发 并行 同步 异步 多线程
什么是 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 队列类型)一种队列处理的优先等级来保证尽量同步完成,其实还是没什么保证,不过有总比没有强。

浅入了解GCD 并发 并行 同步 异步 多线程的更多相关文章
- IOS多线程知识总结/队列概念/GCD/串行/并行/同步/异步
进程:正在进行中的程序被称为进程,负责程序运行的内存分配;每一个进程都有自己独立的虚拟内存空间: 线程:线程是进程中一个独立的执行路径(控制单元);一个进程中至少包含一条线程,即主线程. 队列:dis ...
- {Python之进程} 背景知识 什么是进程 进程调度 并发与并行 同步\异步\阻塞\非阻塞 进程的创建与结束 multiprocess模块 进程池和mutiprocess.Poll
Python之进程 进程 本节目录 一 背景知识 二 什么是进程 三 进程调度 四 并发与并行 五 同步\异步\阻塞\非阻塞 六 进程的创建与结束 七 multiprocess模块 八 进程池和mut ...
- 串行&并行&并发,同步&异步
1. 串行&并行&并发 1.1 串行 这个非常好理解,字面意思,像串成一个串一样,顺序执行 上一个没执行完的话,后面的就必须无条件等待 一般情况就是一个线程里:任务一个接一个执行,类似 ...
- 从浅入深掌握并发执行框架Executor
引言 任务的执行 大多数并发应用程序都是围绕"任务执行(Task Execution)"来构造的:任务通常是一些抽象的且离散的工作单元. 任务通常是一些抽象的且离散的工作单元.通 ...
- GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例
转:http://www.tuicool.com/articles/NVVnMn (1)GCD实现的同步异步.串行并行. ——同步sync应用场景:用户登录,利用阻塞 ——串行异步应用场景:下载等耗时 ...
- 【iOS开发-91】GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例
(1)GCD实现的同步异步.串行并行. --同步sync应用场景:用户登录,利用堵塞 --串行异步应用场景:下载等耗时间的任务 /** * 由于是异步.所以开通了子线程.可是由于是串行队列,所以仅仅须 ...
- GIL锁、进程池与线程池、同步异步
GIL锁定义 GIL锁:Global Interpreter Lock 全局解释器 本质上是一把互斥锁 官方解释: 在CPython中,这个全局解释器锁,也称为GIL,是一个互斥锁,防止多个线程在同 ...
- 消息/事件, 同步/异步/协程, 并发/并行 协程与状态机 ——从python asyncio引发的集中学习
我比较笨,只看用await asyncio.sleep(x)实现的例子,看再多,也还是不会. 已经在unity3d里用过coroutine了,也知道是“你执行一下,主动让出权限:我执行一下,主动让出权 ...
- python 并发编程 操作系统 进程 并发.并行 及 同步/异步,阻塞/非阻塞
操作系统: 多道技术背景: 提高工作效率(充分利用IO阻塞的时间) 同时执行多个任务 多道技术 空间复用:充分的利用内存空间 时间复用:充分利用IO阻塞时间 分时系统: 并发:提高了程序的工作效率 两 ...
随机推荐
- python3.5------购物车
笔者:QQ: 360212316 逻辑图 程序代码 # /usr/bin/env python # -*- coding: utf-8 -*- product_list = [ ["ip ...
- WPF 大数据加载过程中的等待效果——圆圈转动
大家肯定遇到过或将要遇到加载大数据的时候,如果出现长时间的空白等待,一般人的概念会是:难道卡死了? 作为一个懂技术的挨踢技术,即使你明知道数据量太大正在加载,但是假如看不到任何动静,自己觉得还是一种很 ...
- 去除bootstrap模态框半透明阴影
当使用bootstrap模态框默认自带半透明阴影,如果想要去除阴影,需要怎么做呢? 今天在项目中我遇到了这个问题,想要去除模态框的阴影,试了好久都没解决.后来问同事的时候才知道,当模态框弹出后,会加上 ...
- 谈谈springMVC和Strut2的理解
关于struts2框架原理 执行流程 struts2框架的核心是一个过滤器,我们编写的action类都继承ActionSupport的接口(顶层是一个过滤器filter),用户发送请求,经过核心过滤器 ...
- 常用前端框架Angular和React的一些认识
为什么要用AngularJs? 要了解为什么使用AngularJS首先就要接受它的思想: 首先,angularJS借助了传统MVC的架构模式(model模型 view视图 controller控制 ...
- 循序渐进Python3(十一) --6-- Ajax 实现跨域请求 jsonp 和 cors
Ajax操作如何实现跨域请求? Ajax (XMLHttpRequest)请求受到同源策略的限制. Ajax通过XMLHttpRequest能够与远程的服务器进行信息交互,另外 ...
- iframe高度调整
//设置iframe高度 function setHeight(){ var originalHeight=$(window).height(); var headerHeight=$('.heade ...
- tesseract配置过程
tesseract配置过程: 1. 为了避免配置环境变量,可以先下载一个 tesseract-ocr-setup-3.02.02.exe(tesseract配置文件夹里有),然后安装(假设安装目录为D ...
- 数据转移发现font有问题
本地正常 以为是mime.types没有 但是发现是存在的 然后根据提示百度了很久都没有解决 解决: 去字体官网下载改字体文件下来 上传到服务器 发现可以正常访问 说明不是服务器的问题 有个提示 i ...
- [C#][.net 4]Task 代码示例
using System; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; name ...