在Grand Central Dispatch中使用术语"队列","多核"和"线程"

Ces*_*scy 19 queue multithreading terminology grand-central-dispatch

我试图了解Grand Central Dispatch的概念.我想理解Vandad关于并发编程的书中的这些引用.

GCD的真正用途是将任务分配给多个内核,而不是让您成为程序员,而是担心哪个内核正在执行哪个任务.

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

最后

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

我加粗了关键术语.

多个核心与队列相同吗?队列是否包含许多线程?每个线程都执行任务吗?

ser*_*gio 39

那么多个核心与队列相同?

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

队列由多个线程组成?

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

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

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

每个线程执行一个任务?

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

也许它在开始时非常令人费解,您可能需要阅读一些关于操作系统和高级处理器架构的内容才能完全理解这一点.

GCD旨在让您完全以抽象的方式进行推理:即,在任务和队列方面,忘记线程和核心,被视为一种"实现方式",或者您可以留给的低级细节系统有效使用.