`
R任轩
  • 浏览: 15857 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

iOS多线程编程之Grand Central Dispatch(GCD)

 
阅读更多

GCD的工作原理:

让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务(比如一个函数).

GCD中的队列称为dispatch queue,它可以保证先进来的任务先得到执行
dispatch queue又分为三种:

Serial      

又称为private dispatch queues,同时只执行一个任务。所以也可以创建多个Serial queue,它们各自是同步执行的,但Serial queue之间是并发执行的。

Concurrent

又称为global dispatch queue,可以并发地执行多个任务,但是执行完成的顺序是随机的。

Main dispatch queue

它是全局可用的serial queue,它是在应用程序主线程上执行任务的(UI线程:程序打开的第一个页面)。

常用的几种方法:

1.dispatch_async

为了避免界面在处理耗时的操作时卡死,比如读取网络数据,数据库读写等,会在另外一个线程中处理这些操作,然后通知主线程更新界面。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{  
    // 耗时的操作 比如下载图片 
    dispatch_async(dispatch_get_main_queue(), ^{  
        // 通知主线程更新界面  
    });  
});  

2、dispatch_group_async

dispatch_group_async可以实现监听一组任务是否完成,完成后得到通知执行其他的操作。比如你执行三个下载任务,当三个任务都下载完成后你才通知界面说完成的了

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);  
dispatch_group_t group = dispatch_group_create();  
dispatch_group_async(group, queue, ^{  
    [NSThread sleepForTimeInterval:1];  
    NSLog(@"one");  
});  
dispatch_group_async(group, queue, ^{  
    [NSThread sleepForTimeInterval:2];  
    NSLog(@"two");  
});  
dispatch_group_async(group, queue, ^{  
    [NSThread sleepForTimeInterval:3];  
    NSLog(@"three");  
});  
dispatch_group_notify(group, dispatch_get_main_queue(), ^{  
    NSLog(@"UI");  
});  
dispatch_release(group);  

 根据上面代码执行之后的结果是:one 、two、three、UI

因为只有前三个任务完成之后才会执行最后一个任务。

3、dispatch_barrier_async

dispatch_barrier_async是在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行。

dispatch_queue_t queue = dispatch_queue_create("gcdtest.rongfzh.yc", DISPATCH_QUEUE_CONCURRENT);  
dispatch_async(queue, ^{  
    [NSThread sleepForTimeInterval:2];  
    NSLog(@"dispatch_async_one");  
});  
dispatch_async(queue, ^{  
    [NSThread sleepForTimeInterval:4];  
    NSLog(@"dispatch_async_two");  
});  
dispatch_barrier_async(queue, ^{  
    NSLog(@"dispatch_barrier_async");  
    [NSThread sleepForTimeInterval:4];  
  
});  
dispatch_async(queue, ^{  
    [NSThread sleepForTimeInterval:1];  
    NSLog(@"dispatch_async_three");  
});  

最终输出的顺序为dispatch_async_one、dispatch_async_two、dispatch_barrier_async、dispatch_async_three

 

分享到:
评论

相关推荐

    iOS 多线程编程指南 pdf

    文档主要涵盖的技术点包括NSThread、NSOperation以及Grand Central Dispatch(GCD),这些技术是iOS开发者在开发应用程序时常用的技术。 首先,文档对多线程进行了定义。多线程指的是在单个应用程序中,能够并发...

    Grand Central Dispatch(GCD)介绍要点难点案例分享代码解析

    定义:GCD是苹果公司开发的一套多线程编程的API,用于简化多线程编程的复杂性。 功能:GCD提供了一个易于使用的、基于任务的并发模型,可以将任务提交给系统,系统会自动管理线程的创建、销毁和调度,以实现最佳的...

    ios多线程开发的常用四种方式和基本使用

    本文将深入探讨四种常用的iOS多线程开发方式:pthread、NSThread、NSOperation及NSOperationQueue,以及Grand Central Dispatch(GCD)。 首先,让我们了解下pthread。pthread是POSIX线程库,它在iOS中被用于跨平台...

    ios 多线程编程指南

    多线程虽然是并发执行代码的传统方式,但是苹果公司推荐使用更加现代化的方法,例如操作对象(Operation objects)和Grand Central Dispatch(GCD)。这些技术提供了更高效的多核并发实现机制。 #### 1.4 线程支持 ...

    ios多线程编程

    在iOS平台上,多线程编程可以通过多种技术实现,包括NSThread、Grand Central Dispatch(GCD)、Operation Objects等。本文档将重点讨论iOS平台下的多线程编程技术。 首先,我们需要明确什么是多线程。多线程是指在...

    iOS多线程GCD和线程锁的使用

    iOS多线程编程之Grand Central Dispatch(GCD)使用,卖票的例子来讲NSThread的线程同步,使用了两种锁,一种NSCondition ,一种是:NSLock,还有加了一个 线程3 去唤醒其他两个线程锁中的wait,里面的注释很已经写的...

    iOS多线程编程指南

    文档提到了iOS平台上支持的多种多线程技术,比如使用NSThread类、POSIX线程以及Grand Central Dispatch(GCD)等。这些技术各有优势,在实际开发中,开发者需要根据应用需求选择合适的多线程方案。 文档详细讲解了...

    多线程GCD的使用

    iOS多线程编程之Grand Central Dispatch(GCD)使用,具有1、常用的方法dispatch_async 2、dispatch_group_async 3、dispatch_barrier_async 4、dispatch_apply的用法

    iOS多线程编程之NSThread的使用案例

    2、Cocoa NSOperation (iOS多线程编程之NSOperation和NSOperationQueue的使用)3、GCD 全称:Grand Central Dispatch( iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用) 这三种编程方式从上到下,抽象度...

    iOS多线程编程技术之NSThread、Cocoa NSOperation、GCD

    ### iOS多线程编程技术详解:NSThread、Cocoa NSOperation、GCD #### 一、多线程基本概念 1. **进程**:在移动设备(如iPhone)上,每一个应用程序都可以被视为一个独立的进程。每个进程都会有一个主线程(main ...

    Cocoa多线程编程之 block 与 dispatch quene

    在iOS和Mac开发中,Cocoa框架提供了强大的多线程编程支持,让我们能够高效地处理复杂的并发任务。本文将深入探讨Cocoa中的多线程编程,特别是如何利用block(闭包)和dispatch queue(调度队列)来实现线程间的协调...

    iOS 多线程总结之GCD的使用详解

    ### iOS多线程与GCD概述 在iOS开发中,多线程是一个非常重要的概念。通过多线程,我们可以利用多核处理器的优势,将不同任务分散到多个线程中执行,从而提高程序的响应速度和执行效率。GCD(Grand Central Dispatch...

    iOS多线程编程

    本文将深入探讨iOS中的多线程编程,包括GCD(Grand Central Dispatch)、NSOperation、NSThread的使用,以及异步和同步下载、Block的运用,以及ASIHttpRequest类库的使用。 首先,GCD是Apple推出的一种多线程解决...

    ios多线程编程文档(翻译版)

    iOS多线程编程是iOS开发中的一个重要方面,它允许应用程序同时执行多个代码路径,以实现更高效的计算和响应。本文档是由Apple公司出品的官方多线程编程指南的翻译版本,由謝業蘭【老狼】翻译,并获得了有米移动广告...

    iOS多线程开发NSThread.pdf

    Grand Central Dispatch (GCD) 是 iOS 4.0 之后引入的多线程编程方式,提供了更多的特性和运行库来支持多核并行编程。 NSThread 是 iOS 中的一种多线程编程方式,使用 NSThread 可以创建和管理线程。NSThread 提供...

    iOS多线程编程知多少 - 51CTO.COM1

    本文将深入探讨iOS多线程编程的主要知识点。 首先,我们要了解iOS中的多线程模型。主要有三种实现方式:NSOperationQueue、NSThread和GCD(Grand Central Dispatch)。GCD是苹果推出的一种高效、简洁的多线程管理...

    iOS多线程Demo

    在“iOS多线程Demo”中,可能会包含如何在后台线程完成耗时操作后,在主线程更新UI的方法,如使用`dispatch_async`向主线程发送任务,或者使用`performSelectorOnMainThread`。 此外,多线程还会涉及线程安全问题,...

Global site tag (gtag.js) - Google Analytics