并发编程之operationqueue和gcd

并发编程之operationqueue和gcd

ID:34465236

大小:65.50 KB

页数:12页

时间:2019-03-06

并发编程之operationqueue和gcd_第1页
并发编程之operationqueue和gcd_第2页
并发编程之operationqueue和gcd_第3页
并发编程之operationqueue和gcd_第4页
并发编程之operationqueue和gcd_第5页
资源描述:

《并发编程之operationqueue和gcd》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、并发编程之GCD在《并发编程之OperationQueue》中讲了Cocoa并发编程中的OperationQueue,了解了OperationQueue是一个面向对象的并发编程接口,它支持并发数,线程优先级,任务优先级,任务依赖关系等多种配置,可以方便满足各种复杂的多任务处理场景。本篇将接着讲另一种并发编程机制–GCD(GrandCentralDispatch)。iOS4.0中首度引入GCD,GCD是管理任务执行的一项技术,它使得我们对多任务处理变得更加方便和有效。它支持同步或异步任务处理,串行或并行的处理队列(DispathQueue),非系统调用的信号量机制,定时任

2、务处理,进程、文件或网络的监听任务等。这个庞大的任务处理技术大大减少了线程的管理工作,使基于任务的开发变得更加高效。 DispatchQueueDispatchQueue是一个任务执行队列,可以让你异步或同步地执行多个Block或函数。DispatchQueue是FIFO的,即先入队的任务总会先执行。目前有三种类型的DispathQueue:1.串行队列(Serialdispatchqueue)2.并发队列(Concurrentdispatchqueue)3.主队列(Maindispatchqueue) 串行队列串行队列一次只能处理一个任务,可以由用户调用dispatc

3、h_queue_create创建:1.dispatch_queue_t queue; 2.queue = dispatch_queue_create("com.example.MyQueue", NULL); dispatch_queue_create第一个参数是串行队列标识,一般用反转域名的格式表示以防冲突;第二个参数是queue的类型,设为NULL时默认是DISPATCH_QUEUE_SERIAL,将创建串行队列,在必要情况下,你可以将其设置为DISPATCH_QUEUE_CONCURRENT来创建自定义并行队列。 并行队列并行队列可以同时处理多个任务,在不得以的情

4、况下可以用dispatch_queue_create创建,但一般我们都要用系统预定义的并行队列,即全局队列(GlobalConcurrentDispatchQueues)。目前系统预定义了四个不同运行优先级的全局队列,我们可以通过dispatch_get_global_queue来获取它们。1.dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);  dispatch_get_global_queue第一个参数是队列的优先级,分别对应四个全局队列:D

5、ISPATCH_QUEUE_PRIORITY_HIGHDISPATCH_QUEUE_PRIORITY_DEFAULTDISPATCH_QUEUE_PRIORITY_LOWDISPATCH_QUEUE_PRIORITY_BACKGROUND dispatch_get_global_queue中第二个参数目前系统保留,请设置为0即可。 主队列主队列是一个特殊的队列,它是系统预定义的运行在主线程的一个DispatchQueue。可以通过dispatch_get_main_queue来获取唯一的主队列。主队列一般运行一些需要与主线程同步的一些短时任务。1.dispatch_qu

6、eue_t mainQueue = dispatch_get_main_queue();  获取当前队列你可以通过dispatch_get_current_queue获取运行时的队列:1.dispatch_queue_t currentQueue = dispatch_get_current_queue(); 如果在队列执行任务中调用,返回执行此任务的队列;如果在主线程中调用,将返回主队列;如果在一般线程(非主线程线程非队列执行任务)中调用,返回DISPATCH_QUEUE_PRIORITY_DEFAULT全局队列。 在队列中运行任务你可以随时向一个队列中添加一个新任务

7、,只需要调用一下dispatch_async即可:1.dispatch_async(aQueue, ^{ 2.    //Do some work; 3.});  dispatch_async中的任务是异步执行的,就是说dispatch_async添加任务到执行队列后会立刻返回,而不会等待任务执行完成。然而,必要的话,你也可以调用dispatch_sync来同步的执行一个任务:1.dispatch_sync(aQueue, ^{ 2.    //Do some work; 3.}); dispatch_sync会阻塞当前线程直到提交的任务

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。