多线程之GCD(一)

Grand Central Dispatch简称(GCD)是由苹果公司开发的技术,是一个非常好的用于多核设备的解决方案。GCD核心在于两个概念:

     队列:队列负责管理开发者提交的任务,GCD队列始终以FIFO(先进先出)的方式来处理任务-----但由于处理执行的时间不同,所以先处理的任务并不一定先结束。队列既可以是串行队列,也可以是并发队列,串行队列每次只处理一个任务,必须前一个任务执行完成后,才能执行下一个任务;并发队列则可同时处理多个任务,因此可以多个任务并发处理。
    队列底层会维护一个线程池来处理用户提交任务,线程池的作用是执行队列管理的任务。串行队列底层的线程池只是维护一个线程即可,并发队列则需要维护多个线程。

    任务:任务就是用户提交给队列的工作单元,这些任务将会给队列底层维护的线程池执行,这些任务会以多线程的方式执行。

使用GCD遵守两个步骤:

1.创建队列。

2.将任务提交给队列。

创建队列:

-》串行队列:串行队列底层的线程池只要一个线程,因此只提供一个线程来执行任务,所以后一个任务必须等到前一个任务执行结束才能开始执行。

-》并发执行:线程池提供多个线程来执行任务,所以可以按FIFO的顺序并发启动、执行多个任务。

(1)获取系统默认的全局并发队列

获取系统默认的全局并发队列:

dispatch_queue_t queue =dispatch_get_global_queue(

DISPATCH_QUEUE_PRIORITY_DEFAULT,0)

(2)获取系统主线程关联的串行队列

获取系统主线程关联的串行队列:

dispatch_queue_t queue =dispatch_get_main_queue();就相当于直接在程序主线程中执行任务。

(3)创建串行队列

创建串行队列:

dispatch_queue_t queue =dispatch_queue_create(“ios.queue”,DISPATCH_QUEUE_SERIAL);

如果将多任务提交给串行队列,多任务只能一个一个按顺序执行。

(4)创建并发队列

创建并发队列:

dispatch_queue_t queue =dispatch_queue_create(“ios.queue”,DISPATCH_QUEUE_CONCURRENT);

如果将多个任务提交给并发队列,可以按FIFO的顺序启动多个并发执行任务。

得到队列之后,就可以将任务提交给队列,并由队列底层管理的线程池来执行任务。

提交任务

向队列提交任务:

void dispatch_async(dispatch_queue_t queue,dispatch_block_t block):

将代码块以异步方式提交给指定队列

void dispatch_async_f(dispatch_queue_t queue,void *context,dispatch_function_t work):

将函数以异步方式提交给指定队列

void dispatch_sync(dispatch_queue_t queue,dispatch_block_t block):

将代码块以同步方式提交给指定队列

void dispatch_sync_f(dispatch_queue_t queue,void *context,dispatch_function_t block):

将函数以同步方式提交给指定队列

void dispatch_after(dispatch_time_t when,dispatch_queue_t queue,dispatch_block_t block):

将代码块以异步方式提交给指定队列,该队列底层的线程池将负责在when指定的时间执行该代码块。

void dispatch_after_f(dispatch_time_t when,dispatch_queue_t queue,void *context,dispatch_function_t work):

将函数以异步方式提交给指定队列,该队列底层的线程池将负责在when指定的时间执行该函数。

void dispatch_apply(size_t iterations,dispatch_queue_t queue,void(^block)(size_t)):

将代码块以异步方式提交给指定队列,该队列底层的线程池将会多次重复执行代码块。

void dispatch_apply(size_t iterations,dispatch_queue_t queue,void context,void(*work)(void ,size_t)):

将函数以异步方式提交给指定队列,该队列底层的线程池将会多次重复执行函数。

void dispatch_once(dispatch_once_t *predicate,dispatch_block_t block):

将代码块提交给指定队列,该队列底层的线程池控制在应用的某个生命周期内仅执行该函数一次。其中predicate参数是一个指向dispatch_once_t(本质就是long型整数)变量的指针,该变量用于判断该代码块是否已经执行过。

时间: 2024-10-11 09:25:27

多线程之GCD(一)的相关文章

OC多线程之GCD ----- 2

dispatch_create生成的Queue不管是并行队列还是串行队列,其优先级都是默认优先级 但是可以用dispatch_set_target_queue来改变队列的优先级 dispatch_set_target_queue(原来的队列, 目标优先级队列) 使用这个函数需要获取两个队列,一个是需要变更优先级的队列,一个是指定优先级的队列(指定优先级的队列可以通过get_global获得) 如果多个串行队列优先级相同,那么这些队列里的任务也会串行执行 dispatch_after函数并不能非常

iOS多线程之GCD小记

iOS多线程之GCD小记 iOS多线程方案简介 从各种资料中了解到,iOS中目前有4套多线程的方案,分别是下列4中: 1.Pthreads 这是一套可以在很多操作系统上通用的多线程API,是基于C语言的,在在oc中使用时需要包含 #import<pthread.h> 使用这种多线程方案需要手动处理线程的各个状态的转换,也就是要管理线程的生命周期. 2.NSThread 这种多线程方案经过了苹果的封装,是一种面向对象的方案,因此可以直接操控线程对象,相对来说比较便捷,其生命周期也要手动管理 3.

OC多线程之GCD

要了解多线程首先要知道什么是进程,什么是进程? 正在进行中的程序被称为进程,负责程序运行的内存分配 每一个进程都有自己独立的虚拟内存空间 什么是线程: 线程是进程中一个独立的执行路径(控制单元) 一个进程中至少包含一条线程,即主线程 可以将耗时的执行路径(如:网络请求)放在其他线程中执行 创建线程的目的就是为了开启一条新的执行路径,运行指定的代码,与主线程中的代码实现同时运行 线程的优缺点: 优势 (1)充分发挥多核处理器优势,将不同线程任务分配给不同的处理器,真正进入“并行运算”状态 (2)将

iOS 开发之多线程之GCD

1.GCD(Grand Centrol Dispath) 并行:宏观以及微观都是两个人再拿着两把铁锹在挖坑,一小时挖两个大坑 并发:宏观上是感觉他们都在挖坑,微观是他们是在使用一把铁锹挖坑,一小时后他们挖了两个小坑. 总结:就单个cpu来说,大部分进程是并发进行的,就是一把铁锹,你一下我一下,只是间隔时间较短,用户感觉不到而已. 应用: GCD包括: (1)实际使用中 //dispatch_get_global_queue(0, 0)第一个0是优先级,第二个保留字段 dispatch_async

(五十五)iOS多线程之GCD

GCD的全称为Grand Central Dispatch,翻译为大中央调度,是Apple开发的一个多线程编程解决方法. 进程和线程的概念: 正在进行中的程序被称为进程,负责程序运行的内存分配,每一个进程都有自己独立的虚拟内存空间. 线程是进程中一个独立的执行路径,即主线程,主线程有1M的栈区,对于耗时的执行路径,可以放在子线程(512K栈区)中执行. Tip:新建线程会消耗内存空间和CPU事件,线程太多会降低系统的运行性能,多线程是通过CPU时分复用实现的. Tip:多线程是为了并发执行多项任

iOS开发多线程之GCD

- (void)viewDidLoad { [super viewDidLoad]; /*GCD:Grand Central Dispatch 牛逼的中枢调度器,自动管理线程的生命周期(创建 调度 销毁).将任务存放到队列中,GCD会自动将队列中的任务取出,先进先出,放到线程中执行. 同步执行任务:在当前线程中执行 dispatch_sync(dispatch_queue_t queue,dispatch_block_t block) 异步执行任务:在其他线程执行 dispatch_async(

ios多线程之GCD

** dispatch_after 延时操作应用场景 例如:游戏后台需要做一些随机的事件,需要在某个时间后,调用方法! 1> 调用的方法通常是跟UI有关的,例如提示用户等 2> 不了解GCD或者多线程的人,可以直接填空即可 */ - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self delay1]; } #pragma mark - 延时操作 /** 在其他线程中调用 dispatch_after */

iOS多线程之GCD学习笔记

什么是GCD 1.全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 2.纯C语言,提供了非常多强大的函数 GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 任务和队列 GCD中有2个核心概念 任务:执行什么操作 队列:用来存放任务 GCD的使用就2个步骤,首先确定定制任务(

iOS开发-多线程之GCD(Grand Central Dispatch)

Grand Central Dispatch(GCD)是一个强有力的方式取执行多线程任务,不管你在回调的时候是异步或者同步的,可以优化应用程序支持多核心处理器和其他的对称多处理系统的系统.开发使用的过程中只需要将执行的任务并添加到到适当的Dispatch Queue中,GCD就能生成必要的线程并计划执行任务.Dispatch Queue更简单而且在实现符合需求的多线程任务时更有效率.Dispatch  Queue一般来说有三种方式,如下图: Serial执行的时候的先进先出,Concurrent

IOS中的多线程之GCD

在ios中,使用多线程有三种方式,分别是:NSThread.NSOperation和NSOperationQueue.GCD,在本节,主要讲解一下CDD的使用. GCD(Grand Central Dispatch) ,他是基于C语言开发的一套多线程开发机制,也是目前苹果官方推荐的多线程开发方法.GCD的抽象层次最高,用起来比较简单,但是因为它是基于C语言开发的,是面向过程的,所以在使用的时候不如面向对象的好理解.但是GCD这种机制相比较于前面两种多线程开发方式最显著的优点就是它对于多核运算更加