GCD 创建异步线程
来源:互联网 发布:淘宝卖家提现收费吗 编辑:程序博客网 时间:2024/04/30 07:52
GCD的全称为Grand Central Dispatch,是Apple开发的一个多线程编程解决方法。
进程和线程的概念:
线程是进程中一个独立的执行路径,即主线程,主线程有1M的栈区,对于耗时的执行路径,可以放在子线程(512K栈区)中执行。例如QQ和浏览器 这属于不同的线程, 浏览器中打开多个进程页面;
1:新建线程会消耗内存空间和CPU事件,线程太多会降低系统的运行性能,多线程是通过CPU时分复用实现的。
2:多线程是为了并发执行多项任务,不会提高单个算法本身的执行效率。
iOS中三种多线程技术:
1.NSThread
建立一个线程方便,但是管理多个线程非常困难,但是NSThread的currentThread方法可以跟踪任务所在的线程。
2.GCD (基于C语言的底层API),使用block来定义任务,推荐使用。
3.NSOperation/NSOperationQueue 使用GCD的一套OC API,提供了一些GCD中不易实现的特性。
注:直接使用GCD更好一些。
注:GCD的函数都是以dispatch开头的,dispatch的含义是分派、调度。
注:同步为sync,异步为async
1.串行队列的异步任务:使用一个子线程会依次执行
<span style="color:#009900;">dispatch_queue_t q = dispatch_queue_create("queue<1>", DISPATCH_QUEUE_SERIAL); for (int i = 0; i < 3; i++) { dispatch_async(q, ^{ NSLog(@"%@ i = %d",[NSThread currentThread],i); }); }</span>打印串行队列的输出发现,i的值是从0到2
<span style="color:#009900;">dispatch_queue_t q = dispatch_queue_create("queue<2>", DISPATCH_QUEUE_CONCURRENT); for (int i = 0; i < 3; i++) { dispatch_async(q, ^{ NSLog(@"%@ i = %d",[NSThread currentThread],i);</span><pre name="code" class="objc"><span style="color:#009900;"> }); }</span>
分别依次输出的:打印输出,发现i的值是随机排列的:
0 0
- GCD 创建异步线程
- GCD创建线程基础
- IOS-线程异步操作GCD
- IOS-线程异步操作GCD
- GCD是否创建线程总结
- 用GCD线程组与GCD信号量将异步线程转换为同步线程
- 用GCD线程组与GCD信号量将异步线程转换为同步线程
- 创建线程介绍及 GCD 简单使用
- IOS 部分的GCD 异步线程方法简述
- gcd中同步异步并行串行线程数目的关系
- 异步线程无法多次创建的问题
- HandlerThread 创建一个异步的后台线程
- GCD 线程
- GCD 线程
- GCD线程
- GCD线程
- GCD线程
- 线程GCD
- 第一个JAVA程序
- 用SendCloud发送短信验证码
- 《嵌入式产品分析与设计》第8章整理
- apache kafka监控系列-KafkaOffsetMonitor
- 使用groovy读取excel里面内容
- GCD 创建异步线程
- onWindowFocusChanged重要作用 and Activity生命周期
- Spring+webservice写一个test小实例
- mybatis自动生成对应model,dao,xml文件
- 初识内核模块编译
- 数据库:多表之间的设计以及对应类之间的关系,与数据库的操作。
- iOS 表视图的分区头部文字设置
- Java用wait和notify实现线程协作
- Java用wait和notify实现线程协作