菜鸟教程小白 发表于 2022-12-13 09:06:11

ios - 与 OpenGL ES + CoreData 的并发性


                                            <p><p>我有三个任务:</p>

<ol>
<li><p>一个获取任务。它从 <code>CoreData</code> 获取对象(大约 2000 个)并将 <code>NSManagedObjectIDs</code> 传递到主线程,在那里它们被转换回 <code>NSManagedObjects</code> 并存储在 <code>NSArray</code> 中。此任务的优先级最低。</p></li>
<li><p>一个计算任务。此任务遍历这些对象并计算对象的一些值。这些值存储为 <code>NSManagedObject</code> 子类的 transient 属性。此任务是第二高优先级。</p></li>
<li><p>一个 OpenGL ES 绘图任务。这是根据计算任务的结果更新 UI 的绘图循环。此任务具有最高优先级,因为任何减速都会降低帧速率,并且在缩放或平移时非常明显。</p></li>
</ol>

<p>我的问题是创建一种设计模式,它允许前两个任务完成它们的工作,同时仍然允许 OpenGL 任务以最大帧速率运行。如果我使用 GCD 队列,不可避免地会发生 OpenGL 任务将被其他两个任务之一阻塞,并且会卡顿。</p>

<p>我在想我需要让 OpenGL 线程在它自己的数据副本上运行,但我不确定它是什么样子,或者即使它是正确的解决方案。以前有没有人处理过这类问题?如果是这样,您是如何同时实现并发性和性能的?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我认为最好的解决方案如下。</p>
<ul>
<li>在 GCD 并发队列或串行队列上执行任务 1 和 2。将 GCD 并发队列用于并发可行的任务。</li>
<li>在主 RunLoop 上执行任务 3。</li>
</ul>
<p>请引用文档
"<a href="http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/ConcurrencyandOpenGLES/ConcurrencyandOpenGLES.html#//apple_ref/doc/uid/TP40008793-CH409-SW2" rel="noreferrer noopener nofollow">OpenGL ES Programming Guide for iOS - Concurrency and OpenGL ES</a> "</p>
<blockquote>
<p><em>Identifying Whether an OpenGL Application Can Benefit from Concurrency</em></p>
<p>The application performs many tasks on the CPU that are independent of OpenGL ES rendering. Games, for example, simulate the game world, calculate artificial intelligence from computer-controlled opponents, and play sound. You can exploit parallelism in this scenario because many of these tasks are not dependent on your OpenGL ES drawing code.</p>
</blockquote>
<p>不过,如果您需要使用多线程 OpenGL ES 渲染,这些有用的文档可能会对您有所帮助。</p>
<ul>
<li> <a href="http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/ConcurrencyandOpenGLES/ConcurrencyandOpenGLES.html#//apple_ref/doc/uid/TP40008793-CH409-SW2" rel="noreferrer noopener nofollow">OpenGL ES Programming Guide for iOS - Concurrency and OpenGL ES</a> </li>
<li> <a href="http://developer.apple.com/library/ios/#qa/qa1612/_index.html" rel="noreferrer noopener nofollow">Technical Q&amp;A QA1612 - OpenGL ES multithreading and EAGLSharegroup</a> </li>
<li> <a href="http://volcore.limbic.com/2011/06/13/multithreaded-renderer-on-ios/" rel="noreferrer noopener nofollow">Multithreaded Renderer on iOS</a> </li>
<li> <a href="http://volcore.limbic.com/2011/06/15/multi-threaded-opengl/" rel="noreferrer noopener nofollow">Multi-threaded OpenGL</a> </li>
<li> <a href="http://volcore.limbic.com/2011/06/27/multithreaded-rendering-in-ios-pt-2/" rel="noreferrer noopener nofollow">Multithreaded Rendering in iOS Pt. 2</a> </li>
</ul></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 与 OpenGL ES &#43; CoreData 的并发性,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/7364581/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/7364581/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 与 OpenGL ES &#43; CoreData 的并发性