GCD的简单介绍

一)GCD 的使用方式

dispatch_async(dispatch_queue_t queue, dispatch_block_t block);

async表明运行方式

queue则是你把任务交给那个线程队列来处理

block代表的是你要做的事情

//线程运行方式

dispatch_async 异步执行

dispatch_sync  同步执行

dispatch_delay 延迟执行

...

二)处理任务对象 dispatch queue(线程队列)

一、dispatch_get_main_queue  主线程队列(UI线程队列)

二、dispatch_get_global_queue 并行线程队列,由系统创建三个不同优先级的dispatch queue。并行队列的执行顺序与其加入队列的顺序相同。

三、串行队列,一般用于按顺序同步访问,依次执行(顺序由代码先后觉得),可创建任意数量的串行队列,各个串行队列之间是并发的。

当想要任务按照某一个特定的顺序执行时,串行队列是很有用的。串行队列在同一个时间只执行一个任务。我们可以使用串行队列代替锁去保护共享的数据。和锁不同,一个串行队列可以保证任务在一个可预知的顺序下执行。

串行队列通过dispatch_queue_create创建,可以使用函数dispatch_retain和dispatch_release去增加或者减少引用计数。

//dispatch queue叫线程队列

dispatch_queue_create 用于创建用户线程队列。可以创建Serial/Concurrent Dispatch Queue 两种队列,即串行与并行队列。

一、创建Serial Dispatch Queue。

dispatch_queue_t serialQueue =  dispatch_queue_create (  "com.SerialQueue" , NULL );

可以创建多个串行队列,串行队列也可以并行执行。决不能随意的大量生产Serial Dispatch Queue。

二、创建Concurrent Dispatch Queue

dispatch_queue_t concurrentQueue =  dispatch_queue_create ( "com.ConcurrentQueue" ,

DISPATCH_QUEUE_CONCURRENT );

Concurrent Dispatch Queue不过创建多少都没有问题,因为Concurrent Dispatch Queue所使用的线程由系统的XNU内核高效管理,不会影响系统性能。

三) 只执行一次的线程  一般用来写单例模式

static dispatch_once_t onceToken;

dispatch_once (&onceToken, ^{

});

EG:

SubObject *subobject =  nil ;

+ (  SubObject *)sharedRequest

static dispatch_once_t onceToken;

dispatch_once (&onceToken, ^{

subobject = [[  SubObject alloc ]  init ];

return subobject

// 延迟2秒执行线程

double delayInSeconds =  2.0 ;

dispatch_time_t popTime =  dispatch_time (  DISPATCH_TIME_NOW , delayInSeconds *  NSEC_PER_SEC );

dispatch_after (popTime, dispatch_get_main_queue  (), ^( void ){

// code to be executed on the main queue after delay

});

//线程汇总通知,等所有子线程(这个称呼不准确,先代替了)执行完成后,才执行notify线程

dispatch_group_t group = dispatch_group_create  ();

dispatch_group_async  (group, dispatch_get_global_queue  ( 0 , 0 ), ^{

// 并行执行的线程一

for (  int i=  0 ; i<  10 ; i++) {

NSLog (  @"---------%i" ,i);

}

});

dispatch_group_async  (group, dispatch_get_global_queue  ( 0 , 0 ), ^{

// 并行执行的线程二

for (  int i=  10 ; i<  20 ; i++) {

NSLog (  @"+++++++++%i" ,i);

}

});

dispatch_group_notify  (group, dispatch_get_global_queue  ( 0 , 0 ), ^{

// 汇总结果

NSLog (  @"完成" );

});

时间: 2024-10-11 00:36:52

GCD的简单介绍的相关文章

关于ios多线程GCD的简单介绍

很久没写博客了,实在太忙了,没有时间写.现在终于空闲下来了,今天就给大家介绍下ios开发里GCD的用法. 刚开始学习的新手,或许对多线程很迷茫,那么什么是线程呢?其实很简单,不要想那么复杂. 1.我们通常知道进程,就是正在执行中的程序,每个进程有自己独立的内存空间,进程之间互相不干涉.(就比如你打开微信) 2.什么是线程?线程是进程执行的基本单元.进程中的任务是在线程中执行的,进程在启动后会自动蜕化为主线程(ios UI Main thread),然后在执行任务. 3.线程的串航执行,比如我要下

关于GCD的常用方法介绍,MRC

1.GCD的简单介绍 GCD全称Great Center Dispatch,我们可以给它起个‘滚床单’名字,便于更好的记忆 GCD是由苹果公司开发的技术.是为了优化应用程序,支持多核心处理器和其他的对称多处理系统的系统 GCD属于函数级的多线程,运用的是C语言(大部分接触的是block块),性能更高,功能也更加强大. GCD首次发布在Mac OS X10.6,iOS4及以上也可以用. 2.CGD的2个核心 1)任务:具有一定功能的代码段. 主要分为同步任务和异步任务 同步任务:不管在哪种类型的队

猫猫学iOS(五十)多线程网络之GCD简单介绍(任务,队列)

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents GCD简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为"牛逼的中枢调度器" 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务

iOS多线程GCD的简单使用

在iOS开发中,苹果提供了三种多线程技术,分别是: (1)NSThread (2)NSOperation (3)GCD 简单介绍一下GCD的使用. GCD全称 Grand Central Dispatch,可以称之为大中央调度.实际上GCD是管理着一个线程池,如何创建线程,如何回收线程,以及分配多少个线程,这些都是GCD来控制的.在开发中,程序员是不用操作线程的相关事情,程序员只需要把应该做的操作放到相应的队列里面即可. 一:自定义队列 GCD中有多种队列,其中自定义的队列有两种:串行队列和并行

python的列表,元组和字典简单介绍

引 入 java                                   python 存取多个值:数组或list集合 ------------------------> 列表,元组 key-value格式:    Map        ------------------------>    字典 自己学习发现,java跟python这两门面向对象语言在数据类型的定义上,很多思想都是互通的,这里不说java,简单介绍一下python的列表,元组和字典. 一.列表 List: 最通

javascript的return语句简单介绍

javascript的return语句简单介绍:return语句在js中非常的重要,不仅仅具有返回函数值的功能,还具有一些特殊的用法,有个清晰的把握是非常有必要的.下面就结合实例简单介绍一下return语句的作用.一.用来返回控制和函数结果:通常情况,return语句对于一个函数是很有必要的,因为往往需要函数在一系列的代码执行后会得到一个期望的返回值,而此值就是通过return语句返回,并且将控制权返回给主调函数.语法格式: return 表达式 代码实例如下: function add(){

Object-c集合的简单介绍

一.简单介绍 NSArray/NSMutableArray NSSet/NSMutableSet NSDictionary/NSMutableDictionary NSArray.NSSet.NSDictionary是不可变的,创建的时候初始化 NSMutableArray.NSMutableSet.NSMutableDictionary是可变的 二.使用介绍 NSArray是有序的数组 NSMutableArray *myArray=[[NSMutableArray alloc] init];

plsql的环境与介绍:环境的搭建和plsql的简单介绍

PLSQL编程 1.环境的搭建 (1)创建一个存储表空间 SQL> conn /as sysdbaConnected. SQL> create tablespace plsql datafile '/u01/oracle/oradata/ORCL/plsql01.dbf' size 1G; Tablespace created. (2)创建PLSQL用户SQL> create user plsql identified by plsql default tablespace plsql;

CSS之box-sizing的用处简单介绍

前几天才发现有 box-sizing 这么个样式属性,研究了一番感觉很有意思, 通过指定容器的盒子模型类型,达到不同的展示效果 例如:当一个容器宽度定义为 width:100%;  之后,如果再增加 padding 或者 border 则会溢出父容器,是向外扩张的 如果使用该样式,指定为 box-sizing: border-box; 则 padding 和 border 就不会再溢出,而是向内收缩的,这个效果感觉非常实用, 特别是 input 和 textarea 等 现在设置 100% 再直