大中央派遣(GCD)
GrandCentralDispatch(GCD)是AppleMacOSX和iOS操作系统的一项技术,是对C语言,API和运行时库的扩展的组合,允许应用程序开发人员识别要在其中运行的代码部分平行。像OpenMP一样,GCD管理线程的大多数细节。GCD识别对称为块的C和C++语言的扩展。块只是一个独立的工作单元。它由插入在一对大括号{}前面的插入符号specified指定。在−下面显示了一个简单的块示例。
{ ˆprintf("This is a block"); }
它通过将块放在调度队列中来调度运行时执行的块。当它从队列中删除一个块时,会将其分配给它管理的线程池中的可用线程。GCD识别两种类型的调度队列:串行和并发。放置在串行队列中的块按FIFO顺序删除。从队列中删除一个块后,它必须先完成执行,然后再删除另一个块。每个进程都有自己的串行队列(称为主队列)。开发人员可以创建特定进程本地的其他串行队列。串行队列对于确保顺序执行多个任务很有用。并发队列上放置的块也按FIFO顺序删除,但是一次可以删除几个块,从而允许多个块并行执行。系统范围内共有三个并发调度队列,它们根据优先级进行区分:低,默认和高。优先级表示块的相对重要性的近似值。非常简单,应将具有较高优先级的块放在高优先级分配队列上。以下代码段说明了如何获取默认优先级的并发队列,并使用分派向该队列提交一个块async()
功能-
dispatch_queue_t queue = dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch async(queue, ˆ{ printf("这是一个障碍。"); });
在内部,GCD的线程池由POSIX线程组成。GCD主动管理池,允许线程数量根据应用程序需求和系统容量来增加和减少。