gpt4 book ai didi

ios - GPUImage:EAGLContext和线程队列

转载 作者:行者123 更新时间:2023-12-01 17:55:25 26 4
gpt4 key购买 nike

最近,我正在研究GPUImage的源代码,以提高我的OpenGL ES技能。当我阅读GPUImageContext类的代码时,我发现它存储了对queue的引用,该引用已在库的其他部分中使用。

例如,在GPUImageView.m中,队列在commonInit中与runSynchronouslyOnVideoProcessingQueue一起使用,以执行与上下文不直接相关的某些操作(例如向着色器添加属性)。

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

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

P.s.
我希望我不要因为好奇而冒犯作者。

最佳答案

这样做的原因是为了提供一定程度的线程安全性。一次只能从一个线程安全地访问OpenGL ES上下文。为此,我使用了与OpenGL ES上下文相关联的串行调度队列,并调度了与该队列上的上下文相关的所有事件。

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

您可以选择仅在主线程上执行所有这些操作,这是我最初所做的,但是这样做有一些缺点。缓慢的处理可能会阻塞UI。在后台线程上执行OpenGL ES渲染具有显着的性能优势,范围甚至从单核设备提高了10%,到多核iOS硬件提高了40%以上。您还可以防止使用该框架的开发人员从非主线程访问该实例的情况。

关于ios - GPUImage:EAGLContext和线程队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18687656/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com