多线程GCD
因为pthread和nsthread要求开发人员对线程相关的知识了解深入; 手动启动线程;加锁/解锁;造成很多隐患 --》 苹果公司给出了gcd的多线程的解决方案(可选的设置)
什么是gcd?
1) 基于c (宜用);
2)将原来的子线程做的任务放到队列queue(FIFO)中;以block方式执行
3) 自动的启动线程来执行队列中的任务(开发人员无需和线程直接打交道)
4) 线程数gcd会根据当前的资源自动的分配线程个数
队列类型:
串行队列:任务一个一个的按照顺序(FIFO)执行; 每次只能执行一个任务,并且必须等待前一个任务执行完毕
并行队列:同时执行多个任务;不必等待执行任务完成
执行任务方式:
同步执行:dispatch_sync队列中的任务在主线程中执行
//线程执行的任务
for (int i = 0; i < 10; i++) {
[NSThread sleepForTimeInterval:1];
NSLog(@"--------------%@", [NSThread currentThread]);
}
for (int i = 0; i < 2; i++) {
[NSThread sleepForTimeInterval:1];
NSLog(@"--------------%@", [NSThread currentThread]);
}
- (IBAction)serialSync:(id)sender {
NSLog(@"串行队列;同步执行");
//1.创建一个空的串行队列
dispatch_queue_t queue = dispatch_queue_create("FirstSerialQueue", DISPATCH_QUEUE_SERIAL);
//2.写第一个任务,并提交
dispatch_sync(queue, ^{
//线程执行的任务
[self coders];
});
//线程执行的任务
[self coders];
});
NSLog(@"打印第二个完毕");
}

});
});
NSLog(@"打印第二个完毕");

});
});
NSLog(@"打印第二个完毕");

});
});
NSLog(@"打印第二个完毕");

主队列(main queue) <—> 串行队列;顺序执行任务
全局队列(global queue) <—> 并行队列
for (int i = 0; i <2; i++) {
[NSThread sleepForTimeInterval:1];
NSLog(@"-------%d-------%@", i,[NSThread currentThread]);
}
}
- (IBAction)golbalSync:(id)sender {
NSLog(@"全局队列 + 异步");
//系统默认,直接获取就可以。dispatch_get_global_queue(优先级,)
dispatch_queue_t globalQueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//2.写第一个任务,并提交
dispatch_async(globalQueue, ^{
//线程执行的任务
[self coders];
});
NSLog(@"打印第一个完毕");
//3.写第二个任务,并提交
dispatch_async(globalQueue, ^{
//线程执行的任务
[self coders];
});
NSLog(@"打印第二个完毕");

NSLog(@"主队列 + 同步");
//获取主队列,会在主线程中执行队列中的任务
dispatch_queue_t mainQueue=dispatch_get_main_queue();
//2.写第一个任务,并提交
dispatch_async(mainQueue, ^{
[self coders];
});
NSLog(@"打印第一个完毕");
//3.写第二个任务,并提交
dispatch_async(mainQueue, ^{
[self coders];
});
NSLog(@"打印第二个完毕");

多线程GCD的更多相关文章
- iOS 多线程GCD的基本使用
<iOS多线程简介>中提到:GCD中有2个核心概念:1.任务(执行什么操作)2.队列(用来存放任务) 那么多线程GCD的基本使用有哪些呢? 可以分以下多种情况: 1.异步函数 + 并发队列 ...
- iOS多线程 GCD
iOS多线程 GCD Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main que ...
- 修改版: 小伙,多线程(GCD)看我就够了,骗你没好处!
多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能.具有这种能力的系 ...
- ios多线程-GCD基本用法
ios中多线程有三种,NSTread, NSOperation,GCD 这篇就讲讲GCD的基本用法 平时比较多使用和看到的是: dispatch_async(dispatch_get_global_q ...
- iOS 多线程GCD简介
一.简介 1.1 GCD (Grand Central Dispatch )是Apple开发的一个多核编程的解决方法. Grand 含义是“伟大的.宏大的”,Central含义“中央的”,Dispat ...
- 多线程GCD的基本使用以及注意点
GCD的使用 一:队列 1.串行队列:添加到队列中的任务是一个一个执行的 2.并行(发)队列:添加到队列中的任务是多个同时执行的(一个队列中的多个任务可以同时执行) 3.主队列:里 ...
- IOS开发之多线程 -- GCD的方方面面
前言:这篇GCD的博文是本人阅读了很多海内外大神的关于GCD的文章,以及结合之前自己对GCD的粗浅的认识,然后取其精华,去其槽粕,综合起来的笔记,而且是尽可能的以通熟易懂的并且是正确的理论论述方式呈现 ...
- 刀哥多线程GCD核心概念gcd
GCD GCD 核心概念 将任务添加到队列,并且指定执行任务的函数 任务使用 block 封装 任务的 block 没有参数也没有返回值 执行任务的函数 异步 dispatch_async 不用等待当 ...
- ios开发多线程--GCD
引言 虽然GCD使用很广,而且在面试时也经常问与GCD相关的问题,但是我相信深入理解关于GCD知识的人肯定不多,大部分都是人云亦云,只是使用过GCD完成一些很简单的功能.当然,使用GCD完成一些简单的 ...
随机推荐
- 《深入Java虚拟机学习笔记》- 第19章 方法的调用与返回
<深入Java虚拟机学习笔记>- 第19章 方法的调用与返回
- 学习xcode 博客
csdn http://blog.csdn.net/tianyitianyi1/article/category/1160169/2
- ajax post方法
定义和用法 post() 方法通过 HTTP POST 请求从服务器载入数据. 语法 jQuery.post(url,data,success(data, textStatus, jqXHR),dat ...
- 【译】 AWK教程指南 7AWK应用实例
本节将示范一个统计上班到达时间及迟到次数的程序. 这程序每日被执行时将读入两个数据文件: * 员工当日到班时间的数据文件 ( 如下列的 arr.dat ) * 存放员工当月迟到累计次数的文件 当程序执 ...
- Linux与Windows的8个不同
(整理来自网络) 对刚刚接触Linux的人来说,很容易从windows的观念去理解Linux系统.今天扒一扒Win和Linux之间常见的8个区别. 一.Linux终端输入密码不回显字符 用户的密码在L ...
- php中的字符串和正则表达式
一.字符串类型的特点 1.PHP是弱类型语言,其他数据类型一般都可以直接应用于字符串函数操作. 1: <?php //输出345 //输出345 //先查找hello常量,若没找到,将hello ...
- 浅析Netty的异步事件驱动(二)
上一篇文件浅析了Netty中的事件驱动过程,这篇主要写一下异步相关的东东. 首先,什么是异步了? 异步的概念和同步相对.当一个异步过程调用发出后,调用者不能立刻得到结果.实际处理这个调用的部件在完成后 ...
- Mysql engine
MySQL engine.type类型的区别:
- POJ2723-Get Luffy Out(2-SAT)
题意:有m扇门,每个门上有两把锁,打开任意一个锁都可以打开这扇门.门要按顺序一个一个打开. 现在有n对不同的钥匙,每对钥匙只能用其中一个,问最多能打开多少门. 题解:对钥匙建图,门是限制条件来建边.每 ...
- 第十三章、学习 Shell Scripts 条件判断式
利用 if .... then 单层.简单条件判断式 if [ 条件判断式 ]; then 当条件判断式成立时,可以进行的命令工作内容: fi <==将 if 反过来写,就成为 fi !结束 i ...