J'ai expérimenté avec le multi-threading un moteur de jeu. À titre d'exemple, voici la structure de base de mon code.Est-il mauvais de créer de nouveaux threads de travail à chaque image dans un jeu multi-thread?
#include <thread>
int main() {
std::thread physics_thread;
std::thread particles_thread;
std::thread graphics_thread;
while (!shouldClose) {
physics_thread = thread(doPhysics, &someData1);
particles_thread = thread(doParticles, &someData2);
graphics_thread = thread(doGraphics, &someData3);
physics_thread.join();
particles_thread.join();
graphics_thread.join();
}
}
Est-ce une pratique incroyablement mauvaise? J'utilise Linux sur un système assez faible et la création de ces threads à chaque mise à jour est assez bon marché. En termes de toutes les plates-formes cependant, est-ce juste une mauvaise idée? Sur une note de côté, j'ai essayé d'exécuter constamment des threads de travail avec des mutex et des variables de condition sur le wazoo et parfois je peux le faire fonctionner, mais cela semble absurdement compliqué pour ce que j'essaie d'accomplir.
ressources Réaffectation dans la boucle est certainement une mauvaise pratique. Dans ce cas particulier, vous pouvez utiliser un pool de threads quelconque. Cependant, la réaffectation inutile ne constitue pas le plus gros problème avec cet extrait. Une telle boucle met une synchronisation stricte des tâches de threads de travail au lieu de les exécuter de manière asynchrone. – VTT
Créer des threads est coûteux. –
La solution compliquée est forcément un peu plus efficace. Cela dépend de votre application si vous avez vraiment besoin de cette efficacité supplémentaire ou non. Pourquoi ne pas faire quelques tests et voir combien créer des threads ronge votre taux de trame? Ensuite, décidez si vous devez créer une solution plus complexe. – Galik