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. Tachyon Cluster: 基于Zookeeper的Master High Availability(HA)高可用配置实现

    1.Tachyon简介 Tachyon是一个高容错的分布式文件系统,允许文件以内存的速度在集群框架中进行可靠的共享,就像Spark和 MapReduce那样.通过利用信息继承,内存侵入,Tachyon ...

  2. BZOJ1602: [Usaco2008 Oct]牧场行走

    1602: [Usaco2008 Oct]牧场行走 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1084  Solved: 556[Submit][St ...

  3. Linux自定义命令

    linux自定义命令,就是给当前命令取个别名.比如:ls 列出当前的文件,rm + 文件名 就能删除该文件,如何自定义命令,可以使用alias比如:alias gobin='cd /opt/tomca ...

  4. MIPI D-PHY 总结

    Operating Modes: Control, High-Speed, and Escape 1.The Lane is only in High-Speed mode during Data b ...

  5. 《University Calculus》-chape6-定积分的应用-平面曲线长度

    平面曲线的长度: 积分的重要作用体现在处理曲线和曲面. 在这里我们讨论平面中一条用参数形式表达的曲线:x=f(t),y=g(t),a≤t≤b. 如图. y=f(x)形式的弧长计算: 之前我们讨论过平面 ...

  6. Web服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程 - VPS侦探

    Web服务器性能/压力测试工具http_load.webbench.ab.Siege使用教程 - VPS侦探 http://soft.vpser.net/test/http_load/http_loa ...

  7. Spark 中的join方式(pySpark)

    spark基础知识请参考spark官网:http://spark.apache.org/docs/1.2.1/quick-start.html 无论是mapreduce还是spark ,分布式框架的性 ...

  8. PHP 下载网络图片

    /* * 功能:php完美实现下载远程图片保存到本地 * 参数:文件url,保存文件目录,保存文件名称,使用的下载方式 * 当保存文件名称为空时则使用远程文件原来的名称 */ function get ...

  9. nyoj 102 次方求模【快速幂】

    次方求模 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 求a的b次方对c取余的值   输入 第一行输入一个整数n表示测试数据的组数(n<100)每组测试只有一 ...

  10. linux 监控命令

    先总结下常用的一些监控工具: ##linux命令 w 系统负载 lsof -p pid 进程打开的文件 lsof -i:port 端口的运行情况 free -m 内存情况 vmstat 进程.内存.内 ...