GCD队列的注意事项

队列中存放的任务最后都要由线程来执行!

队列的原则:先进先出,后进后出(FIFO/ First In First Out)!

队列的类型:

<</span>1> ‘串行‘队列:(Serial Dispatch Queue)

存放按顺序执行的任务!(一个任务执行完毕,再执行下一个任务)

注意两个非常常用的特殊队列

<</span>1> 主队列: // UI 操作放在主队列中执行!

跟主线程相关联的队列!

主队列是 GCD 自带的一种特殊的串行队列!

主队列中的任务都会在主线程中执行!

<</span>2> 全局并发队列: // 一般情况下,并发任务都可以放在全局并发队列中!

"同步"和"异步"的区别:

"同步": 只能在‘当前‘线程中执行任务,不具备开启新线程的能力.

"异步": 可以在‘新‘的线程中执行任务,具备开启新线程的能力.

常见的组合(掌握)

1> dispatch_async + 全局并发队列 (可以开启多条线程)

2> dispatch_async + 自己创建的串行队列 (开启一条线程)

只有‘异步‘执行"并发"队列,才可以开启多条线程.

在主线程中同步执行主队列中的任务,会造成‘主线程‘和‘主队列‘相互等待,卡住主线程!

?

时间: 2024-10-11 16:10:46

GCD队列的注意事项的相关文章

iOS多线程开发小demo7 GCD队列组

// DYFViewController.m // 623-08-队列组 // // Created by dyf on 14-6-23. // Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" @interface DYFViewController () @property (weak, nonatomic) IBOutlet UIImageVi

苹果多线程网络编程之-GCD队列与任务的理解

今天就 iOS 的多线程 GCD 的使用做了一些总结和理解. GCD,Grand Central Dispatch,是Apple开发的一个多核编程的解决方法. GCD其实就是创建/获取一个队列,在 Block 块或方法(函数)里写需要执行的任务代码块,然后将任务放到合适的队列里执行.GCD队列呢,分三种:主队列(串行队列).全局队列(并行队列).自定义队列(自定义).任务执行方法呢,又分为同步执行和异步执行.至于串行队列.并行队列,同步执行.异步执行的特点,自行去学习,这里不做过多阐述.大概意思

GCD 使用若干注意事项

这篇文章写的是看完 WWDC 17 - Modernizing GCD Usage 之后的笔记. 一.Parallelism & Concurrency Parallelism 指的是在多个 CPU 核上同时跑代码. DispatchQueue.concurrentPerform(iterations: 100) { (i) in print("\(i)") } 为了更好的利用多个 CPU 的优势,把任务分为尽可能多的部分,方便调度. 如果只有 3 个部分,那么很可能会出现 B

step 4 GCD 队列演练

串行队列 特点 以先进先出的方式,顺序调度队列中的任务执行 无论队列中所指定的执行任务函数是同步还是异步,都会等待前一个任务执行完成后,再调度后面的任务 队列创建 dispatch_queue_t queue = dispatch_queue_create("queueName", DISPATCH_QUEUE_SERIAL); dispatch_queue_t queue = dispatch_queue_create("queueName", NULL); 串行

多线程 GCD队列组

//  DYFViewController.m //  623-08-队列组 // //  Created by dyf on 14-6-23. //  Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" @interface DYFViewController () @property (weak, nonatomic) IBOutlet UIIma

OC 线程操作 - GCD队列组

队列组两种使用方 /** 新方法 队列组一般用在在异步操作,在主线程写队列组毫无任何作用 */ - (void)GCD_Group_new_group___notify{ dispatch_queue_t queue = dispatch_queue_create("11", DISPATCH_QUEUE_CONCURRENT); dispatch_queue_t globalqueue = dispatch_get_global_queue(0, 0); dispatch_group

GCD线程依赖,GCD队列组,线程监听,线程等待

1.线程监听 有时候经常有这样的需求,AB任务都执行完成之后,刷新界面或者执行其他操作, /** * 队列组 dispatch_group_notify */ - (void)groupNotify { NSLog(@"begin"); dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORIT

OC - GCD 队列组 - 下载图片画图

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [self downloadImage]; } -(void)downloadImage{ dispatch_group_t group = dispatch_group_create(); dispatch_queue_t queue = dispatch_get_global_queue(0, 0); dispatch_group_asy

GCD中的队列与任务

一.简介: Grand Central Dispatch (GCD)是Apple开发的一个多核编程的较新的解决方法.它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统.它是一个在线程池模式的基础上执行的并行任务.在Mac OS X 10.6雪豹中首次推出,也可在IOS 4及以上版本使用. GCD是一个替代诸如NSThread等技术的很高效和强大的技术.GCD完全可以处理诸如数据锁定和资源泄漏等复杂的异步编程问题.GCD的工作原理是让一个程序,根据可用的处理资源,安排他们在任何可用的处理