关于GCD中的队列

队列分为串行队列,并发队列,全局队列和主队列;

串行队列:一次只能安排一个任务。

dispatch_queue_t q = dispatch_queue_create("itcast",DISPATCH_QUEUE_SERIA);

DISPATCH_QUEUE_SERIAL==NULL;

并发队列:一次可安排多个任务。

dispatch_queue_t q = dispatch_queue_create("itcast", DISPATCH_QUEUE_CONCURRENT);

全局队列:系统为了方便程序员开发使用,提供的一个队列,本质上就是并发队列;

dispatch_queue_t q = dispatch_get_global_queue(0, 0);

使用以下代码创建全局队列,就可以实现 iOS 7 & iOS 8的适配!

dispatch_get_global_queue(0, 0);

主队列:专门用在主线程上调度任务的队列。

主线程上调度的任务,都必须在主线程上执行。

dispatch_queue_t q = dispatch_get_main_queue();

在GCD中是将”任务“添加到“队列”中,并指定任务的“执行方法”。

任务:用block封装的一个代码块。

任务:

同步任务: 这句代码没有执行完毕,就不能执行下一段代码。不需要开启线程

异步任务: 这句代码没有执行完毕,可以执行下一局代码,异步往往是开线程的代名词

小结:

1、开不开线程取决于执行任务的函数---同步任务不开线程,异步任务开启线程。

2、开多少个线程取决于队列(并发队列可已开启多条线程,串行队列只开启一条线程)前提是异步任务。

同步任务:不能开线程,一不小心还会死锁!有什么用处?

作用:可以在并发队列中,挡住后续的任务,必须等待某一个任务完成,这种任务之间的关系-"依赖"

如果在 MRC 开发,针对自行创建的队列,需要release

dispatch_release(q);

时间: 2024-12-11 07:48:48

关于GCD中的队列的相关文章

GCD中的队列与任务

一.简介: Grand Central Dispatch (GCD)是Apple开发的一个多核编程的较新的解决方法.它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统.它是一个在线程池模式的基础上执行的并行任务.在Mac OS X 10.6雪豹中首次推出,也可在IOS 4及以上版本使用. GCD是一个替代诸如NSThread等技术的很高效和强大的技术.GCD完全可以处理诸如数据锁定和资源泄漏等复杂的异步编程问题.GCD的工作原理是让一个程序,根据可用的处理资源,安排他们在任何可用的处理

iOS开发 多线程(一)GCD中dispatch队列知识

GCD编程的核心就是dispatch队列,dispatch block的执行最终都会放进某个队列中去进行,它类似NSOperationQueue但更复杂也更强大,并且可以嵌套使用.所以说,结合block实现的GCD,把函数闭包(Closure)的特性发挥得淋漓尽致. dispatch队列的生成可以有这几种方式: 1. dispatch_queue_t queue = dispatch_queue_create("com.dispatch.serial", DISPATCH_QUEUE_

GCD中不同队列 配合 不同函数的 情况分析

两种函数: 1>sync     同步函数, 2>async   异步函数, 四种队列: 1>main queue  主队列 2>手动创建的串行队列 3>全局并发队列 4>手动创建的并发队列 程序验证的就是两种函数分别配合四种队列的执行情况:共八种.全局并发队列和创建的并发队列执行效果是相同的,没有给出. 结果: 1>死锁,前面文章有过介绍,补充一点是:主线程在当前队列中添加任务才会死锁,添加到其他队列不会 2>同步函数配合四种队列都不会开启新的线程 3&g

iOS多线程中,队列和执行的排列组合结果分析

本文是对以往学习的多线程中知识点的一个整理. 多线程中的队列有:串行队列,并发队列,全局队列,主队列. 执行的方法有:同步执行和异步执行.那么两两一组合会有哪些注意事项呢? 如果不是在董铂然博客园看到这边文章请 点击查看原文 提到多线程,也就是四种,pthread,NSthread,GCD,NSOperation 其中phtread是跨平台的.GCD和NSOperation都是常用的,后者是基于前者的. 但是两者区别:GCD的核心概念是将一个任务添加到队列,指定任务执行的方法,然后执行. NSO

GCD 中Group的使用

使用Group实现:先执行一系列操作(在group中),执行完成后再执行别的操作. 1.创建group及任务队列(目的是让group中的所有任务执行完再执行别的任务) dispatch_group_t group = dispatch_group_create(); //创建一个group        dispatch_queue_t globeQ = dispatch_get_global_queue(0, 0); //该方法获取全局队列(每一次得到的都是同一个队列)    2.提交任务到g

GCD中一些API的使用

GCD中一些API的使用 1.串行队列和并行队列 iOS中线程分为串行队列和并行队列,串行队列指的是任务按照先后顺序,依次执行:并行队列指的是任务不按照加入的先后顺序,并发的执行. iOS中串行队列通过如下方式进行创建 dispatch_queue_t queue = dispatch_queue_create("cn.bourbonz.www", DISPATCH_QUEUE_SERIAL); 需要注意的是,引号中的内容表示的是对该队列的描述,后面的参数代表的是串行队列. 并行队列通

java中使用队列:java.util.Queue (转)

Queue接口与List.Set同一级别,都是继承了Collection接口.LinkedList实现了Queue接 口.Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用.BlockingQueue 继承了Queue接口. 队列是一种数据结构.它有两个基本操作:在队列尾部加人一个元素,和从队列头部移除一个元素就

GCD中如何延迟处理任务

在实际的开发中,经常会遇到想要在指定的时间间隔后执行某个处理 <一>在GCD中提供了dispatch_after函数来完成这一操作 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(<#delayInSeconds#> * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ <#code to be executed after a specified delay#>

python多进程中的队列数据共享问题

0x00 起 今天在写一个小东西的时候,需要控制并发量,但又不能直接调用python multiprocessing(问题会在文后提到).于是尝试用Queue来实现. 最一开始的思路是这样的: from multiprocessing import Process from Queue import Queue q = Queue(maxsize = 10) # 通过web应用往队列中添加数据 def put(num): q.put(num) def read(): while True: pr