GCD汇总
//总结如下:
//1.同步请求:不会开启新的线程
//1-1.同步请求--串行队列:不开启新线程--按照顺序执行下去
//1-2.同步请求--并发列队:不开启新线程--按照顺序执行下去 //2.异步请求:会开启新的线程
//2-1.异步请求--串行队列:开启一条新线程--按照顺序执行下去
//2-2.异步请求--并发队列:每条请求开启一条新线程--无顺序执行 //3.主线程
//主线程上面的请求都会在主线程上面执行
//3-1.异步请求:在主线程上面不会开启新的线程--按照顺序执行下去
//3-2.同步请求:卡死 当触发同步请求的时候会立即触发这个方法,但是上面的方法还需要往下面走,相互之间卡死了。 - (void)viewDidLoad {
[super viewDidLoad]; [self test8]; }
// <NSThread: 0x7fd2c3c088a0>{number = 1, name = main}
// 2><NSThread: 0x7fd2c3c14280>{number = 2, name = (null)}
// 4><NSThread: 0x7fd2c3c9a6a0>{number = 4, name = (null)}
// 3><NSThread: 0x7fd2c3e0c4b0>{number = 3, name = (null)}
// 1><NSThread: 0x7fd2c3e0d570>{number = 5, name = (null)}
// 5><NSThread: 0x7fd2c3c14280>{number = 2, name = (null)}
//异步队列--异步请求
//会创建新的线程--线程之间的执行时是并发的
-(void)test1{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"4>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"5>%@",[NSThread currentThread]);
});
} //结果如下
// <NSThread: 0x7fd5bac04910>{number = 1, name = main}
// 1><NSThread: 0x7fd5bac04910>{number = 1, name = main}
// 2><NSThread: 0x7fd5bac04910>{number = 1, name = main}
// 3><NSThread: 0x7fd5bac04910>{number = 1, name = main}
// 4><NSThread: 0x7fd5bac04910>{number = 1, name = main}
// 5><NSThread: 0x7fd5bac04910>{number = 1, name = main}
//异步队列--同步请求
//并没有开启新的线程--还是在主线程上面串行的执行
-(void)test2{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_sync(queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"4>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"5>%@",[NSThread currentThread]);
});
} //结果如下
// <NSThread: 0x7fed50d07b50>{number = 1, name = main}
// 1><NSThread: 0x7fed50d07b50>{number = 1, name = main}
// 2><NSThread: 0x7fed50d07b50>{number = 1, name = main}
// 3><NSThread: 0x7fed50d07b50>{number = 1, name = main}
// 4><NSThread: 0x7fed50d07b50>{number = 1, name = main}
// 5><NSThread: 0x7fed50d07b50>{number = 1, name = main}
//串行队列--同步请求
//并没有开启新的线程--还是在主线程上面串行的执行
-(void)test3{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_queue_create("test", DISPATCH_QUEUE_SERIAL);
dispatch_sync(queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"4>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"5>%@",[NSThread currentThread]);
});
} //结果如下
// <NSThread: 0x7faa8a606430>{number = 1, name = main}
// 1><NSThread: 0x7faa8a61e880>{number = 2, name = (null)}
// 2><NSThread: 0x7faa8a61e880>{number = 2, name = (null)}
// 3><NSThread: 0x7faa8a61e880>{number = 2, name = (null)}
// 4><NSThread: 0x7faa8a61e880>{number = 2, name = (null)}
// 5><NSThread: 0x7faa8a61e880>{number = 2, name = (null)}
//串行队列--异步请求
//开启了一条新的线程--按照顺序执行
-(void)test4{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_queue_create("test", DISPATCH_QUEUE_SERIAL);
dispatch_async(queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"4>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"5>%@",[NSThread currentThread]);
});
} //结果如下
// <NSThread: 0x7fe849c048f0>{number = 1, name = main}
// 1><NSThread: 0x7fe849c048f0>{number = 1, name = main}
// 2><NSThread: 0x7fe849c048f0>{number = 1, name = main}
// 3><NSThread: 0x7fe849c048f0>{number = 1, name = main}
// 4><NSThread: 0x7fe849c048f0>{number = 1, name = main}
// 5><NSThread: 0x7fe849c048f0>{number = 1, name = main}
//主线程--异步请求
//不会开启新的线程,都是在主线程上面执行的
-(void)test5{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_async(queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"4>%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"5>%@",[NSThread currentThread]);
});
} //结果如下
// <NSThread: 0x7fe881501cc0>{number = 1, name = main}
//主线程--同步请求
//卡主线程
-(void)test6{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_sync(queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"4>%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"5>%@",[NSThread currentThread]);
});
} //结果如下
// <NSThread: 0x7fc70a7023c0>{number = 1, name = main}
// 2><NSThread: 0x7fc70a443ac0>{number = 2, name = (null)}
// 3><NSThread: 0x7fc70a61a740>{number = 4, name = (null)}
// 1><NSThread: 0x7fc70a70ea60>{number = 3, name = (null)}
// done //开启多条线程
//统一完成后 -(void)test7{ NSLog(@"%@",[NSThread currentThread]); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{
NSLog(@"1>%@",[NSThread currentThread]);
}); dispatch_group_async(group, queue, ^{
NSLog(@"2>%@",[NSThread currentThread]);
}); dispatch_group_async(group, queue, ^{
NSLog(@"3>%@",[NSThread currentThread]);
}); dispatch_group_notify(group, queue, ^{
NSLog(@"done");
});
}
GCD汇总的更多相关文章
- GCD使用汇总
本文目录 dispatch_queue_t.dispatch_block_t dispatch_sync.dispatch_async dispatch_set_target_queue.dispat ...
- iOS 多线程之GCD的使用
在iOS开发中,遇到耗时操作,我们经常用到多线程技术.Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,只需定义想要执行的任务,然后添加到适当的调度队列 ...
- GCD-两个网络请求同步问题
在网络请求的时候有时有这种需求 两个接口请求数据,然后我们才能做最后的数据处理.但是因为网络请求是移步的 .我们并不知道什么时候两个请求完成 . 通常面对这样的需求会自然的想到 多线程 啊 .表现真正 ...
- GCD的简单用法
/* 创建一个队列用来执行任务,TA属于系统预定义的并行队列即全局队列,目前系统预定义了四个不同运行优先级的全局队列,我们可以通过dispatch_get_global_queue来获取它们 四种优先 ...
- iOS多线程 GCD常见用法
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispat ...
- GCD的使用
什么是 GCD Grand Central Dispatch (GCD) 是 Apple 开发的一个多核编程的解决方法.该方法在 Mac OS X 10.6 雪豹中首次推出,并随后被引入到了 iOS4 ...
- iOS多线程GCD
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispat ...
- iOS学习之GCD
多线程编程 线程定义:一个CPU执行的CPU命令 列一条无分叉的路径就叫线程. 多线程:执行多个不同的CPU命令 有多条路径. 线程的使用:主线程(又叫作UI线程)主要任务是处理UI事件,显示和刷新U ...
- IOS中的多核并发编程GCD
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispat ...
随机推荐
- JavaWeb中文乱码问题解决思路
1.提交页面请求或者服务器端的响应时,需要确保页面编码当时与服务器编码方式是否一致. 2.对于从服务器写入数据库中的数据和从数据库中读取到服务器中的数据,需要确保服务器编码方式与数据库编码方式是否一致 ...
- 【BZOJ2179】FFT快速傅立叶
[BZOJ2179]FFT快速傅立叶 Description 给出两个n位10进制整数x和y,你需要计算x*y. Input 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位 ...
- i o s 崩溃日志分析
转自:http://blog.csdn.net/totogo2010/article/details/39892467 要分析崩溃日志,首先需要保留发布时的编译出来的.xcarchive文件.这个文件 ...
- 指定运行Exchange Powershell的Server
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noexit -command ". 'C:\Program Files ...
- ubuntu/debian gpg error no_pubkey 解决方法
GPG error: http://ppa.launchpad.net precise Release: The following signatures couldn’t be verified b ...
- Linux基础命令(二)
作业一:1) 新建用户natasha,uid为1000,gid为555,备注信息为“master” groupadd -g 555 netasha useradd -u 1000 -g netasha ...
- pycharm的MySQLdb模块导不进去时解决办法
一.Windows下python2.7安装MySQLdb模块 根据Python多少位下载对应版本: 32位:https://pypi.python.org/pypi/MySQL-python/1.2. ...
- 【opencv安裝】ubuntu16 opencv安装+测试
ubuntu16.04 install opencv2.4 to python2 and c++ 四大主流库比较: 对OpenCV的印象:功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善, ...
- 我的Android进阶之旅------>解决:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
错误描述 今天在Android Studio项目中加入了jackson的开发包,编译运行时候,引发了如下的错误: Error:Execution failed for task ':app:trans ...
- 通过文件对照工具Merge数据库
项目分成线下开发版.线上測试版.线上生产版,因此相应有三个数据库. 对于一些静态数据.经常须要同步.改动了线下的开发版本号,同一时候也须要更新线上的測试版和线上生产版数据库,有时候线上的一些数据库改动 ...