已解决
iOS线程
来自网友在路上 159859提问 提问时间:2023-11-20 00:49:35阅读次数: 59
最佳答案 问答题库598位专家为你答疑解惑
1.任务、线程、队列
每一个要执行的操作都是任务:比如说函数
一个队列中可以放很多个线程,一个线程中有很多个任务
可以这样看:有一个办事所(队列),所里有很多窗口(线程),每一个想办事的人(任务)都要在窗口办。
2.队列种类:串行队列、并行队列、系统主队列、系统全局并发队列
可以手动创建的队列:
( 1 )串行队列:系统为串行队列一般只分配一个线程,串行队列中执行任务的线程不允许被当前队列中的任务阻塞(此时会死锁),但可以被别的队列任务阻塞。
let queue = DispatchQueue(label: "com.xxx.xxx.queueName")
( 2 )并行队列:系统会为并行队列至少分配一个线程,线程允许被任何队列的任务阻塞。
let queue = DispatchQueue(label: "com.xxx.xxx.queueName", attributes: .concurrent)
系统自动帮我们创建的6 条队列:1 条系统主队列(串行),5 条全局并发队列(不同优先级),它们是我们创建的所有队列的最终目标队列,这 6 个队列负责所有队列的线程调度。
( 3 )系统主队列:是一个串行队列,它主要处理 UI 相关任务,也可以处理其他类型任务。
let mainQueue = DispatchQueue.main
( 4 )全局并发队列:存在 5 个不同的 QoS 级别。
let globalQueue = DispatchQueue.global(qos: .background) // 后台运行级别
3.任务种类:同步任务、异步任务
1)同步任务:直接在当前线程中插入任务,执行完插入的任务后 ,线程才能执行原任务(会阻塞当前线程)。
queue.sync {
}
2)异步任务:队列会安排另一个线程去执行这一任务(不会阻塞当前线程)。
queue.async {
}
总结:
- 队列一共有四种:串行队列、并行队列、系统主队列、系统全局并发队列
- 串行队列只有一条线程,并且线程中按序执行任务
- 并行队列中可以有很多线程,并且执行任务顺序不分先后
- 同步任务会阻塞当前线程,并在当前线程立刻执行
- 异步任务不会阻塞当前线程,并在与当前线程不同的线程执行
- 如何避免线程死锁:不要在串行和主队列中执行同步任务。
更多深入了解:
iOS Swift GCD 开发教程 - 掘金
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"iOS线程":http://eshow365.cn/6-39816-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 【Java并发编程五】线程的基本使用三
- 下一篇: Visual Studio Code---介绍