一、进程和线程  

  

二、各种队列!

  1、GCD:Grand Central Dispatch

  2、串行队列(Serial)

        你可以创建任意个数的串行队列,每个队列依次执行添加的任务,一个队列同一时刻只能执行一个任务(串行),但是各个队列之间不影响,可以并发执行。每个队列中的任务运行在一个由各自串行队列    维护的独立线程上,一个队列中只有一个线程。

  3、并行队列(Concurrent)

        并行队列是不允许自己创建的,系统中存在三个不同优先级的并行队列。并行队列依旧按照任务添加的顺序启动任务,但是,后一个任务无须等待前一个任务执行完毕,而是启动第一个任务后,立即启动    下一个任务。至于同一时刻允许同时运行多少个任务由系统决定。任务各自运行在并行队列为他们提供的独立线程上,并行队列中同时运行多少个任务,就必须维护多少个线程。

  4、主调度队列(main dispatch queue)

        主调度队列中的任务运行在应用程序主线程上,所以,如果你要修改应用程序的界面,他是唯一的选择
 
  5、全局队列(苹果为了方便多线程的设计,提供一个全局队列,供所有的APP共同使用)

三、队列的任务处理

  1、串行队列(✅DISPATCH_QUEUE_SERIAL)的同步任务和异步任务:dispatch_sync 和 dispatch_async

      

  #串行同步执行结果:不会创建新线程,按照 顺序执行

   

  #串行异步执行结果:创建了一个新线程,但是依然按照 顺序执行

  

  #串行先执行异步,再执行同步的结果:发现同步一直是在主线程,但也是先让异步的执行完再来执行同步的,

   从而说明一个串行队列是顺序执行的,但是也不影响主线程的操作

  

  2、并行队列(✅DISPATCH_QUEUE_CONCURRENT)的同步任务和异步任务:dispatch_sync 和 dispatch_async

    

  #并行同步执行结果:不会创建新线程,按照 顺序执行[同串行同步]

  #并行异步执行结果:会新建多个线程、操作无序执行(有⽤,容易出错!)队列前如果有其他任务,会等待前面的任务完成之后再执⾏

              场景:既不影响主线程,又不需要顺序执⾏行的操作!

  

  #并行先执行同步,再执行异步的结果:发现同步执行完才会执行异步

  #并行先执行异步,再执行同步的结果:顺序已经完全各种乱入了!

  

  3、全局队列(DISPATCH_QUEUE_PRIORITY_DEFAULT):开发中用这个就对了dispatch_get_global_queue

  

  #全局队列先执行同步,再执行异步的结果:实际上结果是和并列的都一样的效果

  

  4、主线程队列:dispatch_get_main_queue[主队列中添加的同步操作永远不会被执⾏行,会死锁]

  

四、嵌套同步任务

  1、在串行队列中嵌套多一个同步任务,会造成阻塞!!

   

五、小结一下

  1、并行和串行的任务调度的区别

  

OC开发_整理笔记——多线程之GCD的更多相关文章

  1. OC开发_整理笔记——友盟分享(社交化组件)

    0.友盟的地址 http://dev.umeng.com,进入友盟,在使用友盟之前我们需要注册账号获取key (1 进入我们的产品,添加新应用 (2  输入信息,然后就会获取到key 1.选择社会化分 ...

  2. iOS多线程之GCD小记

    iOS多线程之GCD小记 iOS多线程方案简介 从各种资料中了解到,iOS中目前有4套多线程的方案,分别是下列4中: 1.Pthreads 这是一套可以在很多操作系统上通用的多线程API,是基于C语言 ...

  3. iOS多线程之GCD、OperationQueue 对比和实践记录

    [toc] 简介      在计算的早期,计算机可以执行的最大工作量是由 CPU 的时钟速度决定的.但是随着技术的进步和处理器设计的紧凑化,热量和其他物理约束开始限制处理器的最大时钟速度.因此,芯片制 ...

  4. Python开发【整理笔记】

    回顾笔记 学python半年,新知识不断填充,之前学的东西也忘的差不多,整理下笔记,把重点再加深下印象,算是读书拾遗吧.... 1.类继承.新式类.经典类 首先,新式类.经典类的概念只存在于Pytho ...

  5. iOS开发-多线程之GCD(Grand Central Dispatch)

    Grand Central Dispatch(GCD)是一个强有力的方式取执行多线程任务,不管你在回调的时候是异步或者同步的,可以优化应用程序支持多核心处理器和其他的对称多处理系统的系统.开发使用的过 ...

  6. OC开发_代码片段——使用Xib自定义tableViewCell

    一.实现步骤 1.新建一个XIB文件:描述cell——tableCell.xib 2.新建UITableViewCell的子类,也就是cell文件:封装XIB内部的所有东西——TestCell.m \ ...

  7. Navsion二次开发_学习笔记

    CodeUnit Note   This feature is documented in the Navision Application Server Technical White Paper. ...

  8. iOS多线程之GCD学习笔记

    什么是GCD 1.全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 2.纯C语言,提供了非常多强大的函数 GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 G ...

  9. iOS开发多线程之GCD

    Grand Central Dispatch(GCD)是异步执行任务的技术之一.一般将应用程序中记述的线程管理用的代码在系统级中实现.开发者只需要定义想执行的任务并追加到适当的Dispatch Que ...

随机推荐

  1. Windows下使用最新的JDK1.7.0_51以上版本连接Jenkins出现SecurityException

    我在slave节点上安装了jdk1.8, 当在节点上启动slave-agent的时候,报安全性限制的错误: java.lang.SecurityException: Missing required ...

  2. geoserver 数据图层输出格式

    1.WMS服务请求参数 一般WMS的请求地址如下: http://localhost:8080/geoserver/topp/wms?service=WMS&versi on=1.1.0&am ...

  3. jQuery easyUI的datagrid,如何在翻页以后仍能记录被选中的行

    1.先给出问题解决后的代码 <%@ page language="java" import="java.util.*" pageEncoding=&quo ...

  4. ActiveMQ的消息存储方式

    1. 队列存储        采取先进先出模式,同一时间,消息只会发送给某一个消费者,只有当该消息被消费并告知已收到时,它才能在代理的存储中被删除.        对于持久性订阅来说,每一个消费者都会 ...

  5. docker dockerfile构建自己的tomcat镜像

    文件 1.apache-tomcat-8.5.24.tar.gz, jdk-8u151-linux-x64.tar.gz Dockerfile文件: FROM centosWORKDIR /usrCO ...

  6. python -m 命令单独运行一个文件,怎么解决单独运行文件报错?

    依旧是续上篇解决为什么项目能运行,单独文件不能运行. 依旧是python3先发下目录结构,依旧是cmd运行,不要弄pycharm开始运行,否则有些错误就发现不了! 项目下面有pac1文件夹,pac1下 ...

  7. Hibernate_day02讲义_使用Hibernate完成CRM客户管理中查询所有客户的操作

  8. 在python中重新导入模块

    重新加载模块 倘若,更改了已经在 Python shell 中导入的模块,然后重新导入该模块,Python 会认为“我已经导入了该模块,不需要再次读取该文件”,所以更改将无效. 要解决这个问题,有以下 ...

  9. XML转JSON工具类

    原文地址:http://blog.csdn.net/lovesummerforever/article/details/26396465 1.pom依赖 <dependency> < ...

  10. [Python] NotImplemented 和 NotImplementedError 区别

    NotImplemented 是一个非异常对象,NotImplementedError 是一个异常对象. >>> NotImplemented NotImplemented > ...