GCD:是纯C语言写的,是苹果公司为多核的并行运算提出的解决方案。

GCD的两个核心概念: - 任务 - 队列

将任务添加到队列中 GCD会自动将队列中的任务取出,放到对应的线程中执行 任务的取出遵循队列的FIFO原则:先进先出,后进后出 - 创建串行队列

// "WE" 为线程的名称
// DISPATCH_QUEUE_SERIAL 串行
dispatch_queue_t queue = dispatch_queue_create("WE",DISPATCH_QUEUE_SERIAL);
// 也可以这样设置 串行默认为NULL
dispatch_queue_t queue = dispatch_queue_create("WE", NULL)

-创建队列

//DISPATCH_QUEUE_CONCURRENT 并行
dispatch_queue_t queue = dispatch_queue_create("WE", DISPATCH_QUEUE_CONCURRENT);

- 异步执行

dispatch_async(queue, ^{
//
});

- 同步执行

dispatch_sync(queue, ^{
//
});

GCD的几种用法 - 串行队列,同步执行-----不开线程,同步执行

dispatch_queue_t queue = dispatch_queue_create("WE",DISPATCH_QUEUE_SERIAL);
for (int i = ; i < ; ++i) {
// 同步执行
dispatch_sync(queue, ^{
NSLog(@"%d--%@",i,[NSThread currentThread]);
});
} 
- 串行队列,异步执行-----开一个线程,顺序执行
dispatch_queue_t queue = dispatch_queue_create("WE",DISPATCH_QUEUE_SERIAL);
for (int i = ; i < ; ++i) {
// 异步执行
dispatch_async(queue, ^{
NSLog(@"%d--%@",i,[NSThread currentThread]);
});
}
- 并行队列,异步执行-----开多个线程,异步执行
    dispatch_queue_t queue = dispatch_queue_create("WE", DISPATCH_QUEUE_CONCURRENT);

    for (int i = ; i < ; ++i) {
// // 异步执行
dispatch_async(queue, ^{
NSLog(@"异步>%d--%@",i,[NSThread currentThread]);
});
} 

- 并行队列,同步执行-----不开线程,顺序执行

    dispatch_queue_t queue = dispatch_queue_create("WE", DISPATCH_QUEUE_CONCURRENT);
for (int i = ; i < ; ++i) {
// 同步执行
dispatch_sync(queue, ^{
NSLog(@"同步>%d--%@",i,[NSThread currentThread]);
});
} 

- 主队列,异步任务-----不开线程,同步执行

    dispatch_queue_t queue = dispatch_get_main_queue();
for (int i = ; i < ; ++i) {
// // 异步执行
dispatch_async(queue, ^{
NSLog(@"%d--%@",i,[NSThread currentThread]);
});
}

- 主队列,同步执行-----程序执行不出来(死锁) 死锁的原因,当程序执行到下面这段代码的时候

1) 主队列:如果主线程正在执行代码,就不调度任务

2) 同步执行:如果第一个任务没有执行,就继续等待第一个任务执行完成,再执行下一个任务,此时互相等待,程序无法往下执行(死锁)

- 全局队列(本质就是并发队列)

//第一个参数:iOS7和iOS8中适配此参数 可以直接传入0
//第二个参数:为将来保留使用,始终传入0
dispatch_queue_t queue = dispatch_get_global_queue(, );
for (int i = ; i < ; ++i) {
// 并行执行
dispatch_async(queue, ^{
NSLog(@"%d--%@",i,[NSThread currentThread]);
});
}

iOS GCD多线程介绍的更多相关文章

  1. iOS——GCD多线程

    1> 概述 Grand Central Dispatch (GCD)是Apple开发的一种多核编程技术.主要用于优化应用程序以支持多核处理器以及其他对称多处理系统. GCD提供函数实现多线程开发 ...

  2. ios GCD简单介绍 后台运行~

    本从实践出发简单说明: 首先,gcd是Grand Central Dispatch的缩写,意为多线程优化技术,是苹果为多核处理优化的技术.使用简单.清晰. 多线程就分同步.异步方法如下: //异步线程 ...

  3. iOS开发多线程篇—GCD介绍

    iOS开发多线程篇—GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 G ...

  4. iOS开发多线程篇 05 —GCD介绍

    iOS开发多线程篇—GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 G ...

  5. AJ学IOS(50)多线程网络之GCD简单介绍(任务,队列)

    AJ分享,必须精品 GCD简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果 ...

  6. iOS 开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  7. iOS开发多线程篇—GCD的基本使用

    iOS开发多线程篇—GCD的基本使用 一.主队列介绍 主队列:是和主线程相关联的队列,主队列是GCD自带的一种特殊的串行队列,放在主队列中得任务,都会放到主线程中执行. 提示:如果把任务放到主队列中进 ...

  8. iOS开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  9. ios开发:GCD多线程

    ios有三种多线程编程技术,分别是NSThread,Cocoa NSOperation和GCD,GCD全称Grand Central Dispatch 是Apple开发的一个多核编程的解决方法,在iO ...

随机推荐

  1. Haskell函数的语法

    本章讲的就是 Haskell 那套独特的语法结构,先从模式匹配开始.模式匹配通过检查数据的特定结构来检查其是否匹配,并按模式从中取得数据. 在定义函数时,你可以为不同的模式分别定义函数本身,这就让代码 ...

  2. 【HDOJ】3183 A Magic Lamp

    RMQ. /* 3183 */ #include <cstdio> #include <cstring> #include <cstdlib> #define MA ...

  3. ExecuteScalar的学习日志

    一:今天写关于调用sqlhelper类的时候出现了一个异常,我仔细观察没有错误啊,怎么回事:看图 二:出现错误时id的结果是0,也就是说ExcuteScalar的结果是null,明明数据库里有多行数据 ...

  4. QTP自动化测试权威指南 连载(一)

    第一章 简介 什么是自动化测试 自动化测试是对一个已有的手工测试过程减少并尽可能排除人工干预的过程. 什么时候适合做自动化测试 下面是一组适合将手工测试自动化的考量因素: ● 测试需要经常重复. ● ...

  5. 新学Linux时遇到的一些问题

    1.如何进入到Linux的命令终端 (1)按ctrl+alt+t (2)按ctrl+alt+(F1-F6都可以),按ctrl+alt+F7退出 2.按ctrl+alt+(F1-F6)进入命令终端,登录 ...

  6. 【狼】unity3d 怎样在一定时间连按两下键

    public class DoubleClick : MonoBehaviour { ; void Update() { if (Input.GetKeyDown(KeyCode.D)) { if ( ...

  7. js遍历数组和遍历对象的区别

    <script> //----------------for用来遍历数组对象-- var i,myArr = [1,2,3]; for (var i = 0; i < myArr.l ...

  8. SRM 386(1-250pt)

    DIV1 250pt 题意:题意很难翻译....其实就是一个暴力...在看到有一个限制条件的范围为1-10的时候就该想到是暴力,我却半天没想到.... tag:brute-force // BEGIN ...

  9. 关于日历控件My97DatePicker 在IE6下出现“无法打开站点,已终止操作”

    1.My97DatePicker 官方:http://www.my97.net2.在IE6下出现“无法打开站点,已终止操作”的解决办法(转): .这是一个绝对有效的方法,但是会丢失跨越iframe的特 ...

  10. Linux 下挂载硬盘的 方法

    1. 添加磁盘,查看磁盘状况 [root@db1 /]# fdisk -l Disk /dev/sda: 10.7 GB, 10737418240 bytes 255 heads, 63 sector ...