GCD网络多线程---同步运行,异步运行,串行队列,并行队列
总结:同步(无论是串行还是并行)----不又一次开辟子线程
异步(无论是串行还是并行)----开辟子线程
GCD:
dispatch queue
主线程的main queue
并行队列 global dispatch queue
串行队列serial queues
一般用于按顺序同步訪问
#pragma mark - 载入多线程
- (void) _loadMutil
{
//GCD基于C语言
//1.主对列:(串行队列)
dispatch_queue_t mainQueue=dispatch_get_main_queue();
//2.全局并行队列
);
//3.创建串行队列
dispatch_queue_t queueSerial=dispatch_queue_create("jrqueue1",DISPATCH_QUEUE_SERIAL);
//4.创建并行队列
dispatch_queue_t queueConcu=dispatch_queue_create("jrqueue2",DISPATCH_QUEUE_CONCURRENT);
//同步运行+串行队列
/*
dispatch_sync(queueSerial, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"同步串行队列1-----%@",[NSThread currentThread]);
});
dispatch_sync(queueSerial, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"同步串行队列2-----%@",[NSThread currentThread]);
});
*/
//同步运行+并行队列
/*
dispatch_sync(queueConcu, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"同步并行队列1-----%@",[NSThread currentThread]);
});
dispatch_sync(queueConcu, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"同步并行队列2-----%@",[NSThread currentThread]);
});
*/
//异步运行+串行队列-----开启一个子线程,且顺序运行
/*
dispatch_async(queueSerial, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"异步串行队列1-----%@",[NSThread currentThread]);
});
dispatch_async(queueSerial, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"异步串行队列2-----%@",[NSThread currentThread]);
});
dispatch_async(queueSerial, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"异步串行队列3-----%@",[NSThread currentThread]);
});
*/
//异步运行+并行队列----开启多个线程,且并发运行(无序)
/*
dispatch_async(queueConcu, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"异步并行队列1-----%@",[NSThread currentThread]);
});
dispatch_async(queueConcu, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"异步并行队列2-----%@",[NSThread currentThread]);
});
dispatch_async(queueConcu, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"异步并行队列3-----%@",[NSThread currentThread]);
});
*/
//主对列+同步运行-----死锁(将下面两个加入到主队列,等待前面的运行完毕(loadView。
loadData之类的),可是当运行到这一步时,形成死循环)
/*
dispatch_sync(mainQueue, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"同步主队列1-----%@",[NSThread currentThread]);
});
dispatch_sync(mainQueue, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"同步主队列2-----%@",[NSThread currentThread]);
});
*/
}
@end
将以上的方法,在viewDidLoad 中调用一下。看看效果怎样~
GCD网络多线程---同步运行,异步运行,串行队列,并行队列的更多相关文章
- GCD中的dispatch_sync、dispatch_sync 分别与串行、并行队列组合执行小实验
平常开发中会经常用gcd做一下多线程任务,但一直没有对同步.异步任务在串行.并行队列的执行情况做个全面的认识,今天写了个demo跑了下,还是有些新发现的. 代码如下: - (void)touchesB ...
- iOS GCD, 同步,异步,串行队列,并行队列,dispatch_group
同步,指代码在同一个线程运行 异步,代码在另一个线程运行 串行队列,提交到该队列的block会顺序执行 并行队列,提交到该队列的block会并发执行 如果想等某一队列中所有block都执行完了在执行一 ...
- 【原】iOS多线程之异步任务+并行队列情况与异步任务+串行队列(主队列)情况
异步任务+并行队列 把异步任务放到并行队列进行执行,异步任务会在不同的线程中执行. /*异步执行+并行队列*/ - (IBAction)clickBasic1:(UIButton *)sender { ...
- iOS gcd 串行,并行,同步,异步代码研究
参考文章: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #527eff } span.s1 { } http: ...
- java面试一日一题:再谈垃圾回收器中的串行、并行、并发
问题:请讲下java中垃圾回收器的串行.并行.并发 分析:该问题主要考察在垃圾回收过程中垃圾回收线程和用户线程的关系 回答要点: 主要从以下几点去考虑, 1.串行.并行.并发的概念 2.如何考虑串行. ...
- ios--进程/多线程/同步任务/异步任务/串行队列/并行队列(对比分析)
现在先说两个基本的概念,啥是进程,啥是线程,啥又是多线程;先把这两个总是给弄清再讲下面的 进程:正在进行的程序,我们就叫它进程. 线程:线程就是进程中的一个独立的执行路径.这句话怎么理解呢! 一个程序 ...
- iOS:GCD理解1(同步-异步、串行-并行)
1.并行-异步(ST1与ST2抢占资源) 1-1).获取 并行(全局)队列 ,DISPATCH_QUEUE_PRIORITY_DEFAULT 为默认优先级. dispatch_queue_t queu ...
- iOS 多线程的简单理解(2) 队列 :串行 ,并行,MainQueue,GlobalQueue
多线程队列是装载线程任务的队形结构.(系统以先进先出的方式调度队列中的任务执行 FIFO).在GCD中有两种队列: 串行队列.并发队列. 队列 :串行队列.并发队列,全局主对列,全局并发队列 2.1. ...
- 深入GCD(四):使用串行队列实现简单的预加载
其主要思路是使用gcd创建串行队列,然后在此队列中先后执行两个任务:1.预加载一个viewController 2.将这个viewController推入代码如下:@implementation DW ...
随机推荐
- Android 内存监测工具
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 文/幻影浪子 [博主导读]俗话说:工欲善其事必先利其器!我们先来了解下内存监测工具是怎么使用的?为内 ...
- Android RecyclerView And CardView
Google I/O 2014大会公布Android L系统,还有Material Design全新的设计风格.而Material Design卡片式的设计.Google Play应用商店和G+ AP ...
- mIsFunui-判断Funui方法
1.有时候我们根据自己的需要,修改了frameword下的代码,但是,我们又不希望影响第三方,这时候我们就可以在修改处添加一个我们自己的标志位,如,mIsFunui 它是定义在我们自定义的theme里 ...
- ua识别(浏览器标识识别)
ua识别(浏览器标识识别) 一.总结 1.浏览器标识(UA):可以使得服务器能够识别客户使用的操作系统及版本.CPU 类型.浏览器及版本.浏览器渲染引擎.浏览器语言.浏览器插件,从而判断用户是使用电脑 ...
- JS/CSS 响应式样式实例
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 关于ES6(ES2015)的知识点详细总结
ECMAScript6 ECMAScript简称就是ES,你可以把它看成是一套标准,JavaScript就是实施了这套标准的一门语言,现在主流浏览器使用的是ECMAScript5. http://ba ...
- 2.1 Vue组件
Vue组件 全局组件和局部组件 父子组件通讯-数据传递 父->子:通过Props传递 子->父:不允许,但vue通过子组件触发Emit来提交给子组件进行触发 Slot import Cou ...
- GO语言学习(十三)Go 语言变量作用域
Go 语言变量作用域 作用域为已声明标识符所表示的常量.类型.变量.函数或包在源代码中的作用范围. Go 语言中变量可以在三个地方声明: 函数内定义的变量称为局部变量 函数外定义的变量称为全局变量 函 ...
- java方法调用之动态调用多态(重写override)的实现原理——方法表(三)
上两篇篇博文讨论了java的重载(overload)与重写(override).静态分派与动态分派.这篇博文讨论下动态分派的实现方法,即多态override的实现原理. java方法调用之重载.重写的 ...
- stm32单片机时钟中断的配置
原作者:http://www.eeworld.com.cn/mcu/article_2016082828940.html 配置流程: 1:系统时钟初始化,包括系统时钟和要开放的IO口或者功能的时钟 ...