据我了解,Swift 中有 3 种类型的 DispatchQueue:
- 主要(连续剧)(主线)
- 全球(并发)(后台线程并行工作)
- 自定义(并发或串行)
每一个都可能有效(异步或同步)
第一个问题:
主队列是否在工作仅 UI 线程并且不在另一个线程上工作?
如果答案是肯定的,如何DispatchQueue.Main.async
不阻塞 UI 线程。
如果答案是否定的,那么使用的好处是什么DispatchQueue.global
只要DispatchQueue.Main.async
在另一个线程中工作。
第二个问题:
有什么区别DispatchQueue.global(异步) and DispatchQueue.global(同步)只要这个队列工作同时以及在哪里使用每一个?
第三个问题:
有什么区别
- (串行和同步)
- (并发和异步)
我认为:
队列不是线程
主队列和全局队列可以在同一线程中工作
已派遣: 表示将任务放入队列
If 全局队列派往主队列 as sync,调度的任务将在同一线程上工作主队列并将已调度的任务添加到全局队列 ,
这个任务会冻结线程
If 全局队列派往主队列 as async,调度的任务将在其他线程上工作主队列并将已调度的任务添加到全局队列 ,
并且这个任务不会冻结线程
If 主队列派往主队列 as async,调度的任务将在同一线程上工作主队列
If 主队列派往主队列assync 会例外,因为 makedeadlock
调度同步:将任务放入队列并等待完成
异步调度:将任务放入队列中,不等待它完成(任务可以在同一个线程或另一个线程中工作)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)