首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GPUImage: EAGLContext和线程队列

GPUImage: EAGLContext和线程队列
EN

Stack Overflow用户
提问于 2013-09-08 19:20:00
回答 1查看 794关注 0票数 1

最近,我正在改进我的OpenGL ES技能,查看GPUImage的源代码。当我阅读GPUImageContext类的代码时,我发现它存储了对库中其他部分使用的queue的引用。

例如,在GPUImageView.m中,队列在带有runSynchronouslyOnVideoProcessingQueuecommonInit中被用来执行一些与上下文无关的操作(比如向着色器添加属性)。

我的问题是,为什么开发人员决定在“次要”队列上执行这些操作,这是将队列存储到像GPUImageContext这样的类中的好处。

我知道这个问题与GPUImage框架有着严格的联系,但我认为这可能是一个很好的机会来理解像Brad这样的技术熟练的开发人员如何决定构建iOS中最著名的图像处理库之一。

附注:我希望我没有以我的好奇心冒犯作者。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-08 23:00:04

其原因是为了提供一定程度的线程安全。一次只能从一个线程安全地访问OpenGL ES上下文。为此,我使用与OpenGL ES上下文相关联的串行调度队列,并分派任何与该队列上的上下文有关的内容。

使用串行调度队列是一种有效的方法,可以确保每次只接触一件资源。它避免了昂贵锁的开销,并使在非主线程上执行处理操作变得容易。

您可以选择只在主线程上完成这一切,这是我最初所做的,但这有一些缺点。缓慢的处理会阻止UI。在后台线程上执行OpenGL ES呈现具有显著的性能优势,从即使在单核设备上加速10%到在多核iOS硬件上加速超过40%。您还可以避免使用框架的开发人员从非主线程访问它的实例。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18687656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档