当前位置: 首页 > 编程笔记 >

大中央派遣(GCD)

长孙谦
2023-03-14
本文向大家介绍大中央派遣(GCD),包括了大中央派遣(GCD)的使用技巧和注意事项,需要的朋友参考一下

Grand Central Dispatch(GCD)是Apple Mac OS X和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主动管理池,允许线程数量根据应用程序需求和系统容量来增加和减少。

 类似资料:
  • 问题内容: 是否可以在减速器本身中调度动作?我有一个进度栏和一个音频元素。目标是在音频元素中的时间更新时更新进度条。但是我不知道在哪里放置ontimeupdate事件处理程序,或者如何在ontimeupdate的回调中分派操作以更新进度条。这是我的代码: 问题答案: 在减速器内调度动作是一种反模式 。减速器应该没有副作用,只需消化操作有效负载并返回新的状态对象即可。在Reducer中添加侦听器和调

  • 除了我想让我的cherrypy服务器启动两个类之外,我还将遵循cherrypy教程“让它Rest一下”:一个用于服务一些静态文件,另一个用于RESTful API: api.py: 服务器py: 但是,当我启动服务器()并在上执行GET时,我会得到这个错误: 500内部服务器错误 服务器遇到意外情况,无法满足请求。 Traceback(最近的最后一次调用):File"/usr/local/lib/

  • 华为OD机试真题-员工派遣-2024年OD统一考试(D卷) 题目描述: 某公司部门需要派遣员工去国外做项目。现在,代号为x的国家和代号为y的国家分别需要cntx名和cnty名员工。部门每个员工有一个员工号(1,2,3……),工号连续,从1开始。 部长派遣员工的规则: 规则1、从[1,k]中选择员工派遣出去 规则2、编号为x的倍数的员工不能去x国,编号为y的倍数的员工不能去y国 问题: 找到最小的k

  • 假设我有一个没有数据的类: 和派生类 Empty类的对象的大小为1。派生类的空部分的大小通常为0。据我所知,编译器看到基Empty类没有数据,因此它可以优化Empty的大小,以防它“在”Derived中,但标准并不要求这样做。 所以问题是: 我能在编译时确定Derived类的Empty部分并没有占用内存吗。 我知道我可以像一样进行检查...但它太冗长了,并且有几个类,如派生。有没有更优雅的解决方案

  • 问题内容: 我希望有一种方法可以以编程方式访问Android设备上的中央信任密钥库。我知道存在,至少用于验证SSL连接等。它还带有一个方便的工具,用于添加证书,浏览等。(位于设置->位置和安全性->管理受信任的证书下) 我希望能够以编程方式从中检索公钥,以对文件等进行加密。 如果有可用的文档,似乎其他应用程序开发人员正在他们的应用程序中管理自己的密钥库,这似乎是多余的。 有任何想法吗? 问题答案:

  • 我是语音识别方面的新手。 所以我想运行这样的代码:(原始链接:http://www.ling.helsinki.fi/~gwilcock/Tartu-2003/L7-Speech/JSAPI/index。html) 问题是返回null。 根据API,此方法返回null,因为我的系统没有任何合适的语音引擎。所以我试着: 安装CMUSphinx。(链接:http://cmusphinx.sourcef