标签:
IOS支持三个层次的线程编程,从底层到高层(层次越高使用越方便,越简洁)分别是:
1:Thread;
2:Cocoa Operations;
3:Grand Central Dispatch;
简介:
Thread是抽象层次最低的,另外两种线程应用给予thread进行了封装,对于程序员而言,thread相对麻烦,需要程序员管理线程周期,但是效率最高。thread包含两种:Cocoa threads——使用NSThread 或直接从 NSObject 的类方法 performSelectorInBackground:withObject: 来创建一个线程;POSIX threads: 基于 C 语言的一个多线程库。
创建NSThread的方式有三种:
一:[NSThread detachNewThreadSelector:@selector(myThreadMethod:) toTarget:self withObject:nil]; 调用立即创建一个新线程执行操作
二:NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(myThreadMethod:) object:nil]; [myThread start]; NSThread初始化之后,新的线程并没有执行,而是调用 start 时才会创建线程执行。这种方法相对上面的方法更加灵活,在启动新的线程之前,对线程进行相应的操作,比如设置优先级,加锁。
三:[myObj performSelectorInBackground:@selector(myThreadMainMethod) withObject:nil]; 利用 NSObject 的类方法 performSelectorInBackground:withObject: 来创建一个线程:
以上都可以在新的线程中调用performSelectorOnMainThread: withObject:waitUntilDone:更新UI,因为子线程不能直接更新UI。
线程同步与锁:
有很多时候多个线程之间会访问相同的数据,如何避免a线程和b线程之间的冲突,以及执行顺序等需要程序员考虑,这个时候需要用到NSCondition,NSLock,确保线程(原子操作)安全。
用NSCodition同步执行的顺序,NSCodition 是一种特殊类型的锁,我们可以用它来同步操作执行的顺序。它与 mutex 的区别在于更加精准,等待某个 NSCondtion 的线程一直被 lock,直到其他线程给那个 condition 发送了信号。
GCD
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法。在iOS4.0开始之后才能使用。GCD是一个替代诸如NSThread, NSOperationQueue, NSInvocationOperation等技术的很高效和强大的技术。现在的iOS系统都升级到7了,所以不用担心该技术不能使用
Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统。这建立在任务并行执行的线程池模式的基础上的。它首次发布在Mac OS X 10.6 ,iOS 4及以上也可用。
设计: GCD的工作原理是:让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务。
一个任务可以是一个函数(function)或者是一个block。 GCD的底层依然是用线程实现,不过这样可以让程序员不用关注实现的细节。
GCD中的FIFO队列称为dispatch queue,它可以保证先进来的任务先得到执行。
dispatch queue分为下面三种: Serial 又称为private dispatch queues,同时只执行一个任务。Serial queue通常用于同步访问特定的资源或数据。当你创建多个Serial queue时,虽然它们各自是同步执行的,但Serial queue与Serial queue之间是并发执行的。
Concurrent 又称为global dispatch queue,可以并发地执行多个任务,但是执行完成的顺序是随机的。
Main dispatch queue 它是全局可用的serial queue,它是在应用程序主线程上执行任务的
标签:
原文地址:http://www.cnblogs.com/iOSCheng/p/4948693.html