据我了解,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 : 将任务放入队列,不等待完成(任务可能在同一线程或另一个线程中工作)

  • 如果任务在全局队列上调度并且这个协议(protocol)来自主线程
    然后任务将添加到全局队列,新线程将
    创建,任务将立即在新线程
  • 中开始工作
  • 如果任务在主队列上分派(dispatch),并且这个协议(protocol)来自主线程
    然后任务将被添加到主队列,并且不会工作
    立即直到队列中的旧任务完成工作(因为 Main
    队列是顺序的)
  • 关于swift - swift 中 DispatchQueue 类型之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52605016/

    10-10 21:04