[New learn]GCD其他方法的使用】的更多相关文章

https://github.com/xufeng79x/GCDDemo 1.简介 在前面的两篇博文中我介绍了GCD的一般使用方法和死锁的分析调查.本博文中继续讲解GCD的其他比较常用的几个使用方法. 2.线程间的通信 线程间通信意指如何在当前线程中去通知或者去调度其他线程完成任务. 比较经典的一个用例为将耗时操作放在某个线程中(非主队列任务)然后完成后去更新控件(主队列任务). -(void)loadImage { dispatch_async(dispatch_get_global_queu…
https://github.com/xufeng79x/GCDDemo 1.简介 前接[New learn]GCD的基本使用,我们分析了GCD的一般使用方法,其中比较特殊的是在分析到主队列的时候发生了卡死现象. 本章节中将分析研究一下卡死线程发生的原理. 2.分析 从[New learn]GCD的基本使用中我们可以看出,异步执行方式无论是何种队列,无论是否开启新线程都不会发生卡死现象.原因在于如果异步执行方式将任务放入队列后可以“忍受”等待,当线程资源不足的时候可以等待线程空闲后再来执行.所以…
https://github.com/xufeng79x/GCDDemo 1.简介 介绍GCD的使用,介绍多种队列与同步异步多种情况下的组合运行情况. 2.基本使用步骤 如果使用GCD则一般也就两个步骤 1.创建/获取执行队列 2.同步或者异步在队列中执行任务 ,通常任务为一个block 3.队列与执行类型(同步或者异步)的组合运行情况 GCD的队列分为串行队列和并发队列,这两种队里都可以自行创建. 除了能够自行创建队列外,系统中已经存在了主队列和全局队列,这两个队列我们可以直接获取使用. GC…
之前的一篇关于线程的blog已经为大家介绍了GCD的简单使用方式及样例说明,今天因为项目中有特殊的应用GCD的实例,为大家介绍两种特殊需求的使用GCD的方法. 目的:实现一件事情做完,再做下一件事情.确保函数的运行周期. 解决方式:提供下面2种解决方式 1.创建barrier等待线程    dispatch_async(dispatch_get_main_queue(), ^{      [self ActionFirst];     });              dispatch_barr…
<一>引入dispatch_group函数的目的 在追加到dispatch_Queue中的多个处理全部结束后想要执行结束的处理,这种需求经常会在我们的程序中出现 (第一种情况)只使用一个Serial Dispatch Queue时,只要将想要执行的操作全部追加到串行队列,并在最后执行结束的操作即可实现 (第二种情况)当我们使用Concurrent Dispatch Queue时或者使用多个Dispatch Queue时,我们想要实现这种需求变得十分复杂 (由第二种情况引出Dispatch Gr…
最大并发数: 什么是并发数? 同时执行的任务数.比如同时开启三个线程执行三个任务,并发数就是3. 最大并发数相关的方法: -(NSInteger)maxConcurrentOperationCount; -(void)setMaxConcurrentOperationCount:(NSInteger)cnt; 剖析最大并发数:并发数就是同时执行操作的数量,并不是只线程的个数.就是指同时执行任务的个数,当一个线程执行完毕后会有一个回收到线程池的过程,这时如果线程池中还有别的线程就会直接拿出来进行任…
GCD为Grand Central Dispatch的缩写. Grand Central Dispatch (GCD)是Apple开发的一个多核编程的较新的解决方法.在Mac OS X 10.6雪豹中首次推出,并在最近引入到了iOS4.0. GCD是一个替代诸如NSThread等技术的很高效和强大的技术.GCD完全可以处理诸如数据锁定和资源泄漏等复杂的异步编程问题. GCD可以完成很多事情,但是这里仅关注在iOS应用中实现多线程所需的一些基础知识. 在开始之前,需要理解是要提供给GCD队列的是代…
http://ju.outofmemory.cn/entry/140 背景 最近遇到有些带MegaSAS RAID卡的服务器,在业务高峰时突然IO负载飚升得很高,IO性能急剧下降,查了日志及各种设置最后才发现是RAID卡的Cache写策略由WriteBack变成WriteThrough了.更深入的原因是BBU进入了Learn Cycle周期,自动把Cache策略改为WriteThrough. WriteBack和WriteThrough 在开始之前,我需要提到两个词: WriteBack, Wr…
我们常常会延迟某件任务的执行,或者让某件任务周期性的执行.然后也会在某些时候需要取消掉之前延迟执行的任务. 延迟操作的方案一般有三种: 1.NSObject的方法: 2.使用NSTimer的方法: 3.使用GCD的方法: 一般情况下,我们选择使用GCD的dispatch_after. 因为如果不用GCD,编码需要注意以下三个细节: 1.必须保证有一个活跃的runloop. performSelector和scheduledTimerWithTimeInterval方法都是基于runloop的.我…
多线程 当用户播放音频.下载资源.进行图像处理时往往希望做这些事情的时候其他操作不会被中 断或者希望这些操作过程中更加顺畅.在单线程中一个线程只能做一件事情,一件事情处理不完另一件事就不能开始,这样势必影响用户体验.早在单核处理器时期 就有多线程,这个时候多线程更多的用于解决线程阻塞造成的用户等待(通常是操作完UI后用户不再干涉,其他线程在等待队列中,CPU一旦空闲就继续执行, 不影响用户其他UI操作),其处理能力并没有明显的变化.如今无论是移动操作系统还是PC.服务器都是多核处理器,于是“并行…