Модератор
|
|
1 | |
Правильная работа с контекстами в многопоточной программе30.08.2021, 22:49. Показов 1624. Ответов 3
Собственно главный вопрос, как правильно работать с контекстами когда имеется несколько потоков? Я знаю что opengl и так асинхронный, но многопоточность нужна для тяжелых операций вне opengl и загрузки их результатов в видеокарту. Создать контекст не проблема, так же не проблема в виде обмена ресурсами между контекстами (картинки, буферы и тд). У меня несколько иных вопросов (знаю что 1вопрос = 1 тема, но вопросы связаны между собой сильно).
Обязательно ли на каждый поток создавать свой контекст или можно обойтись одним? Когда делать контексты активными? То есть можно ли сделать активным главный сразу после создания, а дополнительные при запуске потоков? Или нужно их переактивировать при каждом действии? И если один контекст то в каждом потоке надо переактивровать постоянно? Хотелось бы иметь минимально возможное количество контекстов это раз и минимум их переключений это два.
0
|
30.08.2021, 22:49 | |
Ответы с готовыми решениями:
3
Медленная работа и ловля исключений в многопоточной программе Работа с контекстами в Modx Работа с двумя контекстами через getproducts Ошибка в многопоточной программе |
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
|
30.08.2021, 23:54 | 2 |
Сообщение было отмечено alecss131 как решение
Решение
В теории можно, но чтобы это было эффективно в многопоточке, придется грамотно разделять владение, чтоб ни один поток не простаивал, пока контекст занят. Проще каждому потоку дать свой контекст.
В каждом потоке может быть только один активный контекст в данный момент времени и один контекст может быть активным только в одном потоке. Активировать когда нужно и только в том потоке где нужен, т.е. активация дополнительного контекста в главном потоке не сделает его активным в другом, активируй его в функции потока.
Пул потоков и каждому потоку работающему с opengl свой контекст. Обычно хватит двух таких потоков (один для рендера, другой для загрузки) А дальше уже смотри, если потоки дающие команды этим двум простаивают из-за заполнения очередей их команд, то попробуй добавить нужный.
1
|
Модератор
|
||||||
31.08.2021, 00:10 [ТС] | 3 | |||||
То есть можно как я написал, главный контекст активировать (в смысле makeCurrent) в главном потоке, а дополнительный контекст в дополнительном потоке при его старте и все? То есть никаких дополнительных переключений.
То есть в случае с бустом, как то так
0
|
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
|
31.08.2021, 00:16 | 4 |
Ну а что переключать то?
Ага (не важно, с бустом или без).
Там только с glfw поаккуратнее (смотри доки), большинство функций не потокобезопасны.
1
|
31.08.2021, 00:16 | |
31.08.2021, 00:16 | |
Помогаю со студенческими работами здесь
4
Метод For в многопоточной программе Назначение параметров в многопоточной программе Безопасный список в многопоточной программе Одновременный инкремент в многопоточной программе Сигналы и слоты в многопоточной программе. Функция с fprintf в многопоточной программе Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Интеграция Arduino и ChatGPT: Практическое руководство
InfoMaster 16.01.2025
В современную эпоху технологических инноваций интеграция искусственного интеллекта с микроконтроллерами открывает принципиально новые возможности для создания умных устройств и автоматизированных. . .
|
Как создать робота, управляемого ChatGPT
InfoMaster 16.01.2025
Концепция проекта
В современную эпоху искусственный интеллект и робототехника становятся все более доступными для энтузиастов и разработчиков. Создание роботизированной руки, управляемой ChatGPT,. . .
|
Как создать ChatGPT бота в Telegram на Python
InfoMaster 16.01.2025
В современном мире технологии искусственного интеллекта становятся все более доступными для разработчиков, открывая новые возможности для создания умных и интерактивных приложений. Одним из самых. . .
|
Машинное обучение с помощью Python
InfoMaster 16.01.2025
Машинное обучение стало неотъемлемой частью современных технологий, позволяя компьютерам учиться на основе данных и принимать решения без явного программирования. В сочетании с языком. . .
|
Использование связки C# и PHP в корпоративной разработке и микросервисной архитектуре
InfoMaster 16.01.2025
Введение в интеграцию C# и PHP
В современной корпоративной разработке все чаще возникает потребность в создании гибких и масштабируемых решений, способных эффективно решать широкий спектр. . .
|
Как использовать Kerio дома для управления сетью и пользователями
InfoMaster 16.01.2025
Использование технологий для улучшения повседневной жизни стало неотъемлемой частью современного быта. Одной из таких технологий является Kerio — мощный инструмент для управления сетью и. . .
|
Есть ли будущее у DVD и Blu-ray?
InfoMaster 16.01.2025
В эпоху стремительного развития цифровых технологий и повсеместного распространения потоковых сервисов вопрос о будущем физических носителей информации становится все более актуальным. Особенно остро. . .
|
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
|
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
|
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
|
Параллельное программирование: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование
Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
|
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
|