据我了解,swift中有 3 种类型的 DispatchQueue:
每一个都可能工作(异步或同步)
第一个问题:
主队列是否只在 UI 线程上工作,而不是在另一个线程上工作?
如果答案是 yes ,那么
DispatchQueue.Main.async
如何不阻塞 UI 线程。如果答案为 No ,只要
DispatchQueue.global
在另一个线程中工作,使用 DispatchQueue.Main.async
有什么好处。第二个问题:
DispatchQueue.global (async) 和 DispatchQueue.global (sync) 之间有什么区别,只要这个队列工作 并发 以及在哪里使用每个?
第三个问题:
什么是差异
最佳答案
我认为:
队列不是线程
主队列和全局队列可以在同一个线程中工作
Dispatched : 表示将任务放入队列
如果 全局队列 在 主队列 作为 sync 调度,则调度的任务将在 主队列 的同一线程上工作,并且调度的任务添加到 全局队列
而这个任务会卡住线程
如果 全局队列 在 主队列 调度为 async ,则调度的任务将在 主队列 的其他线程上工作,并且调度的任务添加到 全局队列
并且这个任务不会卡住线程
如果 Main queue 在 Main queue as async 中分派(dispatch),则分派(dispatch)的任务将在 Main queue 的同一线程上工作
如果 主队列 在 主队列 中调度,则同步将导致异常,因为使 死锁
Dispatch.sync : 将任务放入队列并等待它完成
Dispatch.async : 将任务放入队列,不等待完成(任务可能在同一线程或另一个线程中工作)
然后任务将添加到全局队列,新线程将
创建,任务将立即在新线程
然后任务将被添加到主队列,并且不会工作
立即直到队列中的旧任务完成工作(因为 Main
队列是顺序的)
关于swift - swift 中 DispatchQueue 类型之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52605016/