GCD 学习(一)简介
2015-04-03 15:39
169 查看
GCD(Grand Central Dispatch)是从OS X Snow Leopard和iOS 4开始引入的新一代的多线程编程技术。开发者只需定义想执行的任务并追加到适当的Dispatch Queue中,GCD就能生成必要的线程并有计划的执行任务。并且由于线程管理是作为系统的一部分来实现的,因此系统可以统一管理,它会决定什么时候创建新线程,创建哪些新线程,多个任务是顺序执行还是并发执行。这样就比以前的线程编程更有效率。
Dispatch Queue(调度队列)
使用GCD进行编程,开发者要做的只是定义想执行的任务并追加到适当的Dispatch Queue中。其中,“定义想执行的任务”使用Block语法来完成。Dispatch Queue中的任务按照FIFO的顺序进行处理,也就是先进入的任务先处理。另外,Dispatch Queue分为串行和并发两种。
Serial Dispatch Queue要求等待正在执行的任务完成,再执行下一个。而Concurrent Dispatch Queue中后面的任务可以不必等待正在执行的任务执行完成就可以开始执行,也就是同时可以执行多个任务。换句话说,其实就是Serial Dispatch Queue只会创建一个线程来执行任务,而Concurrent Dispatch Queue会创建多个线程同时执行多个任务。
对于Concurrent Dispatch Queue,OS X和iOS的XNU内核会基于Dispatch Queue中的任务数量、CPU核数和CPU负荷等当前系统状态来决定创建多少个线程和并行执行多少个任务。
一般情况下:如果要求在不能改变执行顺序或不想并行执行多个任务时使用Serial Dispatch Queue。
简言之:Serial Dispatch Queue串行代码;Concurrent Dispatch Queue并行代码。
dispatch_async(queue, ^{ // dispatch_async是异步方法。长时间处理,例如数据库访问 dispatch_async(dispatch_get_main_queue(), ^{ // 到主线程队列中执行 // 例如界面更新 }); });
Dispatch Queue(调度队列)
使用GCD进行编程,开发者要做的只是定义想执行的任务并追加到适当的Dispatch Queue中。其中,“定义想执行的任务”使用Block语法来完成。Dispatch Queue中的任务按照FIFO的顺序进行处理,也就是先进入的任务先处理。另外,Dispatch Queue分为串行和并发两种。
Serial Dispatch Queue要求等待正在执行的任务完成,再执行下一个。而Concurrent Dispatch Queue中后面的任务可以不必等待正在执行的任务执行完成就可以开始执行,也就是同时可以执行多个任务。换句话说,其实就是Serial Dispatch Queue只会创建一个线程来执行任务,而Concurrent Dispatch Queue会创建多个线程同时执行多个任务。
对于Concurrent Dispatch Queue,OS X和iOS的XNU内核会基于Dispatch Queue中的任务数量、CPU核数和CPU负荷等当前系统状态来决定创建多少个线程和并行执行多少个任务。
一般情况下:如果要求在不能改变执行顺序或不想并行执行多个任务时使用Serial Dispatch Queue。
简言之:Serial Dispatch Queue串行代码;Concurrent Dispatch Queue并行代码。
相关文章推荐
- GCD 学习(一)简介
- ios学习笔记——GCD简介
- Pro visual c++/cli and .net 2.0 platform2 学习笔记(4 本书简介)
- awk简介与学习笔记收集第1/3页
- pb学习体会(一)--------------pb下.bib文件的作用简介
- JMail 简介 学习
- Total commander学习笔记之一——Total commander简介
- UML学习-------UML简介
- Asp学习简介一:客户端判断控件
- 写得蛮好的linux学习笔记(帐号管理,开机流程简介)
- 学习Java6(六) 嵌入式数据库Derby(1)简介
- 学习史上最简单的Hibernate入门简介有感
- Java Web 服务学习报告—Web简介
- 关于用python的SQLAlchemy访问数据库的学习记录,及SQLAlchemy的安装简介
- Velocity学习笔记3——Velocity 模板语言(VTL: Velocity Template Language)简介
- Java语言程序员人生:J2ee的学习流程简介
- 日语在线学习网站简介
- 懒人的UML学习笔记1——UML简介
- 本站将陆续写一些开源系统的简介,希望给新人一些学习的指引
- SQL Server 2005盛宴系列之一:SQL Server 2005产品简介-----学习笔记