ios多线程操作(五)—— GCD串行队列与并发队列
2023-09-14 09:08:00 时间
GCD的队列能够分为2大类型,分别为串行队列和并发队列
串行队列(Serial Dispatch Queue):
一次仅仅调度一个任务,队列中的任务一个接着一个地运行(一个任务运行完成后,再运行下一个任务)
创建一个队列
dispatch_queue_t q = dispatch_queue_create(const char *label, dispatch_queue_attr_t attr)
參数:
const char *label:队列的名称
dispatch_queue_attr_t attr:队列的属性,属性有两个,分别为:
DISPATCH_QUEUE_SERIAL(NULL)
串行队列
DISPATCH_QUEUE_CONCURRENT
并发队列
队列属性为宏。当中串行队列的宏值为NULL,所以创建一个串行队列能够用例如以下代码
dispatch_queue_t q = dispatch_queue_create(“chuanXing", NULL);
一个串行的异步任务演演示样例如以下
for (int i = 0; i < 10; ++i) { // 10 个异步 dispatch_async(q, ^{ NSLog(@“%@ - %d", [NSThread currentThread],i); }); } NSLog(@"come here - %@“, [NSThread currentThread]);
运行结果例如以下
主线程运行时间并不确定,但将10个异步任务加入的串行队列中,不管怎样都会依次一个一个运行。并且仅仅会开启一条线程
假设将任务改为同步任务,那么执行结果可想而知(同步任务的特性)
并发队列:
并发队列能够让多个觉得女巫并发(同一时候)运行,它会自己主动开启多个线程同一时候运行任务,并发功能仅仅有在异步函数下才会有效,比如有例如以下代码,并行队列下运行同步任务:
// 1. 队列 dispatch_queue_t q = dispatch_queue_create("bingXing", DISPATCH_QUEUE_CONCURRENT); // 2. 同步运行 for (int i = 0; i < 10; ++i) { dispatch_sync(q, ^{ NSLog(@"%@ %d", [NSThread currentThread], i); }); } NSLog(@"come here - %@",[NSThread currentThread]);
结果例如以下
并发队列下运行同步函数不会创建新线程,全部任务依次在主线程上运行。
再看看并发队列下运行异步函数
// 1. 队列 dispatch_queue_t q = dispatch_queue_create("itheima", DISPATCH_QUEUE_CONCURRENT); // 2. 同步运行 for (int i = 0; i < 10; ++i) { dispatch_async(q, ^{ NSLog(@"%@ %d", [NSThread currentThread], i); }); } NSLog(@"come here - %@",[NSThread currentThread]);
执行结果例如以下:
由此可知并行队列下地异步函数会开启N条子线程,且运行任务的顺序我们无法控制。至于是哪条线程运行任务由队列决定。哪个任务先完毕由CPU决定。结果中number = 4和number = 2的子线程运行了多次任务,那是由于这两条线程运行完任务就会被线程池回收,队列再从线程池中去线程运行任务,这时就会线程反复利用。假设没有线程则会又一次创建。
相关文章
- iOS小技能:地理编码(地址转坐标)
- iOS 获取本地图片尺寸_ios图片处理软件
- ios-anchorPoint、position理解[通俗易懂]
- 如何在ios成功上架android tv?
- iOS多线程
- iOS关于判断输入的密码是否合法,价格动态判断合法性详解手机开发
- iOS点击非输入框时隐藏键盘详解手机开发
- IOS设置图片水印代码详解手机开发
- iOS 多线程 & 网络 – 4.0 – AFN框架简单使用详解手机开发
- 探索Linux系统:在iOS上下载(linux系统ios下载)
- 操作系统开启iOS时代:Linux操作系统的新篇章(ios是linux)
- iOS与Linux:新老技术的融合(ios与linux的关系)
- Linux与iOS:越来越亲密的合作伙伴(linux与ios)
- 在iOS上安装Linux系统的挑战(ios上安装linux)
- 微软更新iOS版OneDrive解决文件搜索故障和扫描创建PDF文件的问题等
- 基于Linux环境下iOS应用开发实践(linux下开发ios)
- 使用MongoDB在iOS设备上开发应用(mongodbios)
- 苹果 AirPods Pro Beta 2 固件发布:支持通话增强,需运行 iOS 15 Beta 的 iPhone,不能回滚
- 移动端iOS技术实现Oracle数据库连接(ios联接oracle)
- iOS让Oracle无处不在(ios支持oracle么)
- 国外开发者破解Daydream手柄,除了安卓7.0还能支持iOS系统
- 谷歌安全团队发现OS X和iOS系统内核漏洞,苹果修复逾期