CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Les Tasks Scheduler : Tutorial?

pierre135b
pierre135b
Niveau 10
29 avril 2017 à 11:19:34

Yop

Je m'intéresse un peu aux tasks scheduler, ces trucs utilisé dans les Systèmes d'exploitation et les Moteurs de jeu, où la performance est cruciale.
J'aimerais bien, pourquoi pas, en faire un. en C++. Cependant je ne trouve pas vraiment de tuto très développé et bien expliqué. La plupart sont obscures et ne rentrent pas dans les détails, mais si j'ai bien suivi :

Un task scheduler crée X "Workers" (On peut lui demander d'en utiliser autant qu'on veut selon les types de tâche à faire et la puissance de la machine) . Chaque worker prend dans la mesure du possible une Tâche en attente et l'exécute. Si cette tâche a des dépendances qui n'ont pas encore été exécutée, il va attendre et en faire une autre en attendant. Si cette tâche possède des "enfants" qui doivent être exécuté, il les fera en priorité par rapport aux autres tâches d'abord..

J'ai bon ? Si oui, l'implémentation de cela est un peu libre, je fait ça comme je veux et j'optimise moi même après selon l'application qui va l'utiliser (A la fin de mon cycle de développement je sais, merci Donald Knuth), les trucs drôle du développement quoi :p

Exemple :
Application Client serveur multithreadé avec 2 types de tâches : Récupérer, pour récupérer les données recues par le serveur, et répondre, pour répondre à ces dernieres de manière appropriées.

Imaginons, je crée 4 workers, et j'ajoute en continu Une tâche "Répondre" avec comme dépendance la tâche "Récupérer". Mon worker va tomber sur la tâche répondre par exemple, et se rendre compte qu'elle a besoin de la tâche Récupérer pour être exécuter, il va donc exécuter celle la d'abord avant de faire quoi que ce soit d'autre. (Après y'a le bordel de récupérer les données d'une autre task mais ça je pense que je peux me débrouiller.)

Merci

godrik
godrik
Niveau 30
29 avril 2017 à 17:23:15

Il n'y a pas une facon unique de faire un task scheduler. En particulier parceque ca depend de la representation interne du task set et du modele de programme qui genere ce task set.

Si tu prends un model de programmation simple. le thread principal est responsable pour cree les toutes les taches et generer les dependances sous la forme d'un graphe. Une fois qu'un ensemble de tache coherent a ete cree il va lancer l'execution de ces taches.
Chaque worker thread prends alors une source du DAG de tache et l'execute. Et tu fais ca jusqu'a ce qu'il n'y ait plus de tache.

Mais c'est relativement casse couille a programmer comme modele en tant qu'utilisateur. Il y a d'autre modele de programmation plus simple a ecrire mais qui rendent le middleware plus complexe. Regarde les constructs de tasking d'OpenMP (en particulier depuis OpenMP4), les taches recursive de Cilk, les pipelines de TBB, ...

godrik
godrik
Niveau 30
29 avril 2017 à 17:25:36

Pour info, j'avais ecrit un systeme a base de taches pour systeme distribue et out-of-core il y a quelques annees. C'est decrit dans la section 3 de http://webpages.uncc.edu/~esaule/public-website/papers/P2S2-12-ZSAYNMVC.pdf

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment