У вас есть ограниченные ресурсы процессора и графического процессора для выполнения всех взаимодействий рендеринга и пользовательского интерфейса, поэтому, если вы максимально используете графический процессор, вы замедляете все остальное в своем приложении.
При этом вам следуетвозможность рендеринга в фоновом потоке без полной остановки всех элементов пользовательского интерфейса.Я выполняю довольно интенсивный рендеринг в своем приложении с открытым исходным кодом Molecules , все это с использованием фоновой очереди GCD, но вы все равно можете прокручивать всплывающие окна и иным образом взаимодействовать с интерфейсом.
Я описываюпроцесс, который я использую в этом ответе , но основной настройкой является очередь GCD одной ширины, которая использует семафор диспетчеризации для предотвращения постановки в очередь дополнительных кадров рендеринга, пока один еще обрабатывается.Потоки и блоки имеют некоторые накладные расходы, поэтому, если они запускаются быстрее, чем они могут быть обработаны, это может привести к истощению ресурсов.Семафор предотвращает это.
Обтекание всех взаимодействий с моим контекстом OpenGL ES в этой очереди обеспечивает использование этого общего ресурса без блокировок, и я вижу значительное повышение производительности по сравнению с простым выполнением всего этого в главном потоке вмногоядерные устройства.Как я уже сказал, я все еще могу взаимодействовать с пользовательским интерфейсом даже во время интенсивного рендеринга.