Dispatch是系统提供的一套用于进行多核多线程编程的API,dispatch会根据CPU的使用情况自动的去创建任务,并把任务提交到队列中进行执行,提高了程序的运行效率
小知识点:Dispatch在GCD层面是没有线程的概念的,其结构是一个先进先出的队列结构。通过block块的方式去提交任务然后会自动的去创建线程并且交给CPU进行执行
两种方法创建一个简单的队列
1、
/*简单的方法去创建线程*/
func example1() -> Void {
let queue1 = DispatchQueue(label: "queue1")
print("queue1:\(queue1)")
}
2、
/*含有属性设置的队列*/
func example2() -> Void {
let label:String = "queue1" // 线程标签名
let qos = DispatchQoS.init(qosClass: .default, relativePriority: 0) // 队列的优先级
let attributes = DispatchQueue.Attributes.concurrent // 队列的种类(并行队列)
let autoreleaseFrequency = DispatchQueue.AutoreleaseFrequency.never // 队列是否自动释放
let queue1 = DispatchQueue(label: label, qos: qos, attributes: attributes, autoreleaseFrequency: autoreleaseFrequency, target: nil)
print("queue1:\(queue1)")
}
系统提供的队列种类有两种、第一种是主线程队列,第二种是全局线程队列
例如:主线程队列于全局线程队列
/*主线程队列于全局线程队列*/
func example3() -> Void {
let mainQueue = DispatchQueue.main
print("主线程队列:\(mainQueue)")
let grobleQueue = DispatchQueue.global()
print("全局线程队列:\(grobleQueue)")
}
串行队列于并行队列的特点与不同
串行队列:串行队列按照提交的先后顺序依次执行,执行完一个任务才能执行下一个任务
并行队列:并行队列无法确定任务的完成先后顺序,多个任务同时进行执行
同步提交与异步提交的特点与不同
同步提交:sync 执行完进行结果返回
异步提交:async 立即进行返回
两者之间的配合使用:
串行队列与同步提交:
列子:
/*四个任务*/
func task1() -> Void {
print("task1开始执行")
sleep(2)
print("task1执行结束")
}
func task2() -> Void {
print("task2开始执行")
sleep(3)
print("task2执行结束")
}
func task3() -> Void {
print("task3开始执行"