【问题标题】:Use of the terms "queues", "multicore", and "threads" in Grand Central Dispatch在 Grand Central Dispatch 中使用术语“队列”、“多核”和“线程”
【发布时间】:2014-02-07 18:43:52
【问题描述】:

我正在努力理解 Grand Central Dispatch 的概念。我想了解 Vandad 关于并发编程的书中的这些引语。

GCD 的真正用途是将任务分派到多个内核,而不必让程序员担心哪个内核正在执行哪个任务。

GCD 的核心是调度队列。 调度队列是线程池

最后

您不会直接使用这些线程。您将只使用调度队列,将任务调度到这些队列并要求队列调用您的任务。

我已将关键术语加粗。

多核与队列相同吗?队列是否由多个线程组成?每个线程都执行一项任务吗?

【问题讨论】:

    标签: multithreading queue grand-central-dispatch terminology


    【解决方案1】:

    队列只是要执行的任务列表,内核取决于处理器,您可以拥有 1 个或多个内核。 队列是可配置的,您可以决定是否可以并发执行任务,如果您允许队列中的并发,则队列中的任务可以同时在不同的内核中执行。

    【讨论】:

      【解决方案2】:

      那么多核和队列是一样的吗?

      不是真的。队列是一种编程抽象,核心是处理器中的物理资源。队列和核心之间没有唯一的关系,尽管在任何给定时间点都可以说给定队列正在给定核心上执行给定任务。

      一个队列由许多线程组成?

      队列由任务组成。当需要执行该任务时,任务由队列管理系统分配给线程。线程是操作系统资源,分配给内核,内核有效地运行它们,并且不知道任务是什么(超线程 CPU 除外)。

      如果您不考虑硬件多线程(例如,超线程),那么在任何给定时间点,核心都在运行特定线程;当需要运行不同的线程时,该内核中会发生上下文切换。如果考虑到硬件多线程,则可以在托管在同一个物理内核中的虚拟内核上运行多个线程。

      队列和线程之间的关系是不透明的。一个队列可以同时管理多个线程,或者一次管理多个线程,或者一直只管理一个;在第一种情况下,您有一个并行队列,能够在同时线程上执行并行任务;在第二种和第三种情况下,你有一个串行队列。

      每个线程执行一个任务?

      在任何给定的时间点,一个线程正在执行一项任务。你可以让线程产生,执行它们的任务,然后死掉;或者您可以拥有执行多个任务的长时间运行的线程(即主线程)。

      也许一开始就很令人费解,您可能需要阅读一些有关操作系统和高级处理器架构的知识才能完全理解这一点。

      GCD 旨在让您仅以抽象术语进行推理:即,就任务和队列而言,而忘记线程和内核,它们被视为一种“实现手段”,或者您可以使用的低级细节留给系统高效使用。

      【讨论】:

      • 感谢您的完美解释!
      • 是一个(或多个)线程在一个队列中运行还是一个(或多个)队列在一个线程中运行(就对象关系而言)?
      【解决方案3】:

      我不确定这些引用是否真的符合 GCD 的正义。例如,依次引用每个引用:

      1. 即使您只有一个可用的内核,GCD 也不仅可用(而且有用),因为多线程某些任务在计算机科学中占有一席之地,而不管可用的物理 CPU 内核的数量是多少。最好将其视为显式管理线程的替代方案 - GCD 将执行线程管理,因此您不必这样做,您(作为程序员)只需考虑队列以及是否必须串行完成某些相关任务或者可以同时进行。

      2. 调度队列不是“线程池”。调度队列是“工作聚合单元”,应该这样考虑。该工作是如何由一个线程或多个线程物理执行的,不是程序员关心的问题,事实上,程序员对此做出的假设越少越好,因为 GCD 非常努力地提高效率并作为 少数 尽可能多地使用线程,同时仍然有效地利用硬件资源。

      第三句话很好——这是一个合适的成语。只需将您的工作(无论是块还是函数/上下文元组)提交到适当的队列,根据需要创建队列以与需要同步的资源相关联,您就掌握了 GCD 的要点。

      【讨论】:

        猜你喜欢
        • 2011-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 2011-06-04
        • 1970-01-01
        • 2011-07-28
        • 2012-05-09
        相关资源
        最近更新 更多