IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Threads & Processus C++ Discussion :

pertinence de std::this_thread::sleep_for(x)


Sujet :

Threads & Processus C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2003
    Messages : 120
    Billets dans le blog
    1
    Par défaut pertinence de std::this_thread::sleep_for(x)
    Bonjour !

    Je me demande quelle valeur minimale est réellement pertinente à l'utilisation de std::this_thread::sleep_for(x)

    au vu des délais lors des changements de contexte en multi-thread, (est-ce une constante, de quoi cela dépend t'il)

    en bref, j'essaie de diminuer l’utilisation du CPU de façon empirique, est-ce que si x se rapproche de zero, l'utilisation du CPU se rapproche de 100 % ?


    désolé si je ne suis pas clair.

    dans mon cas d’expérimentation j'ai deux thread dont chacun dispose d'une boucle infinie avec aucune instruction mis à part ce std::this_thread::sleep_for(x)

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    La documentation est claire (l'emphase n'est pas de moi) :

    Blocks the execution of the current thread for at least the specified sleep_duration.
    L'exécution reprendra donc après un laps de temps égal ou supérieur à la durée spécifiée par l'appelant, à savoir sleep_duration. Mais le noyau ne va pas immédiatement préempter le thread actif dès que le compte à rebours est terminé comme un réveil-matin, il faut encore attendre que le tour de ton thread arrive. Ce délai dépend de beaucoup de paramètres, principalement de la stratégie de préemption du noyau et de la charge qui sont effectives.

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Je ne suis pas certain de ce que tu essayes d'obtenir, mais je partirais depuis le point de vue opposé : Quel est, fonctionnellement, la fréquence de travail nécessaire à ton application ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2003
    Messages : 120
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Quel est, fonctionnellement, la fréquence de travail nécessaire à ton application ?
    En fait j'essaie d'appréhender les concepts clés lors de la conception d'un jeu vidéo (boucle principale et délégation de taches)

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Aux dernières nouvelles que j'ai eues, les développeurs de jeu tendent à éviter les threads, car le coût de synchronisation peut être prohibitif. Donc un sleep_for n'aura pas tant pour effet de permettre à un autre thread de tourner, mais plus de permettre au matériel de se reposer, et donc de ne pas trop chauffer, et donc de na pas bouffer trop de batterie (sur tablette, téléphone) ou de faire trop de bruit de ventilo (sur fixe ou laptop).

    Généralement, pour les jeux, ce qu'on veut avoir de plus rapide à cadencer est l'affichage, avec souvent une cible à 60Hz (le moteur physique peut demander plus en interne, mais sans être vraiment cadencé). Ce qui fait des temps pour un sleep_for de quelques millisecondes, ce qu'un sleep_for n'a généralement pas de problème à gérer...

    Est-ce que c'est le genre de réponse que tu attendais ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  6. #6
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2003
    Messages : 120
    Billets dans le blog
    1
    Par défaut
    Vous répondez parfaitement à mes interrogations merci ^^

    Citation Envoyé par JolyLoic Voir le message
    Aux dernières nouvelles que j'ai eues, les développeurs de jeu tendent à éviter les threads, car le coût de synchronisation peut être prohibitif.
    est-ce spécifique au développement sur smartphone ?

  7. #7
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Aux dernières nouvelles que j'ai eues, les développeurs de jeu tendent à éviter les threads, car le coût de synchronisation peut être prohibitif.
    Dans le cas du jeu vidéo les relations entre les threads sont beaucoup plus complexes que dans le cas d'un programme de calcul scientifique, certes, mais ça ne veut pas dire que l'approche concurrente n'est jamais adaptée. Je pense surtout qu'on ne se donne pas la peine de paralléliser à grande échelle parce que les jeux sont en grande majorité GPU-bound. Le « coût prohibitif » est donc plutôt à chercher au niveau du rapport entre le coût de développement et de maintenance d'une telle conception en regard du maigre bénéfice procuré.

    C'est aussi pourquoi l'emploi d'un moteur de jeu monothreadé (allô, Unreal Engine.. ) pour autre chose qu'un jeu type peut s'avérer un cauchemar très contraignante.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. std::this_thread::sleep_for : erreur de compilation
    Par victor_gasgas dans le forum Langage
    Réponses: 2
    Dernier message: 05/01/2012, 15h27
  2. Sauvegarde std::vector dans un .ini
    Par mick74 dans le forum MFC
    Réponses: 2
    Dernier message: 12/05/2004, 13h30
  3. Recherche "étoilée" avec std::set
    Par guejo dans le forum MFC
    Réponses: 2
    Dernier message: 06/05/2004, 13h28
  4. std MFC
    Par philippe V dans le forum MFC
    Réponses: 7
    Dernier message: 17/01/2004, 00h54
  5. STL : std::set problème avec insert ...
    Par Big K. dans le forum MFC
    Réponses: 13
    Dernier message: 08/11/2003, 01h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo