1.前言


 iOS中处理多核并发的技术有两种分别是:`Grand Central Dispatch`(以下简称`GCD`)和`NSOperationQueue`框架。iOS开发的老司机们在程序开发中处理多个任务同时执行的时候,一定都会使用到这两个框架,而且GCD依靠它简洁的语法和对block的运用一直很受大家的青睐。ios开发中你一定明白 这样一条原则:“任何用于界面ui刷新和用户交互的操作都要放在主线程来操作,任何耗时或者耗CPU的任务必须在异步线程去操作*”,----小白都会问为什要这样,老司机都说记住就好-------这里就简单解释下:  

首先我们来解释第一句话:“任何用于界面ui刷新和用户交互的操作都要放在主线程来操作”,要明白这句话只要明白下面几个点:1.主线程是线程安全的--把所有ui刷新以及用户的交互放在主线程操作会避免很多意外情况的发生,保证在获取服务端返回的数据时,ui界面可以及时安全的刷新数据,给用户带来良好体验 。2.ios中只有主线程才可以立刻刷新ui界面,如果放在异步线程去操作都会造成线程阻塞和延迟的问题。---第二点“任何耗时或者耗CPU的任务必须在异步线程去操作”---如果你很好的明白了前半句,那么这句话的意思就很好理解了,把耗时或者消耗cpu的操作放在异步线程,也就是为了防止线程的阻塞延迟,防止主线程上的ui刷新和用户操作的一系列动作出现卡顿,死锁,延迟等问题。


2.正文


言归正传,我们继续往下看,如果你对ios的中的GCD和DispatchQueue 使用很熟练的话,那么swift3.0的语法和使用应该就是轻车熟路,如果你还不是特别明白GCD是什么鬼?没关系,这里先给大家来点山里的干货:

1. `dispatch queue`:一堆在主线程(或后台线程)上同步(或异步)来执行的代码,一旦被创建出来,操作系统就开始接手管理,在CPU上分配时间片来执行队列内的代码。开发者没法参与`queue`的管理。队列采用`FIFO模式`(先进先出),意味着先加入的也会被先完成,这和超市排队买单,队伍前的总是最先买单出去,的道理是一样一样的。

2. `work item`:一段代码块,可以在queue创建的时候添加,也可以单独创建方便之后复用,你可以把它当成将要在`queue`上运行的一个代码块。`work items`也遵循着`FIFO模式`,也可以同步(或异步)执行,如果选择同步的方式,运行中的程序直到代码块完成才会继续之后的工作,相对的,如果选择异步,运行中的程序在触发了代码块就立刻返回了。

3. `serial`(串行)vs`concurrent`(并行):`serial`将会执行完一个任务才会开始下一个,`concurrent`触发完一个就立即进入下一个,而不管它是否已完成。

接下来直奔主题:Swift3.0 中的GCD和DispatchQueue 使用。


1.'serial'(串行) vs 'concurrent'(并行)

1.1 创建一个DispatchQueue的方法:

就是这么简单

最新文章

  1. Android Soap实例
  2. how to build apache log4cxx 0.10 by Visual Studio 201*
  3. ASP.NET c# Redis 开发
  4. Hadoop学习17--yarn配置篇-内存管理
  5. 微信开放平台,微信登陆第三方网站 提示redirect_uri 参数错误
  6. 从date中获取相应信息
  7. CentOS7 升级python同时解决yum损坏问题
  8. phpmailer,smtp发送邮件实例(转)
  9. jQuery Mobile发展新闻阅读器,适应iphone和android打电话
  10. 广播与P2P通道(下) -- 方案实现
  11. sqlserver 批量修改表前缀
  12. JUnit 3.8.1 源码学习
  13. 详细解读-this-关键字在全局、函数、对象、jQuery等中的基础用法!
  14. MySQL暴错注入方法
  15. Entity Framework入门教程(18)---EF6中基于代码进行配置方式
  16. iOS开发多线程之GCD
  17. C# 获取一定区间的随即数 0、1两个值除随机数以外的取值方法(0、1两个值被取值的概率相等)
  18. python,异常处理
  19. Scrapy爬虫学习笔记 - windows \ linux下搭建开发环境2
  20. winform跨线程访问控件

热门文章

  1. Java中在时间戳计算的过程中遇到的数据溢出问题
  2. ggplot常见语法汇总查询
  3. 绿色地狱 - 纽博格林赛道详解 | Nürburgring
  4. 清理收藏夹中的json
  5. 基于EasyDarwin开源流媒体服务器框架实现EasyNVR H5无插件直播流媒体服务器方案
  6. C++基础 (杂七杂八的汇总 )
  7. shell语法学习
  8. bugclose使用—bug管理工具
  9. 【Python学习之九】模块
  10. 使用SyncNavigator轻松实现数据库异地同步、断点续传、异构同步