2012-12-12 6 views
0

J'essaie de planifier des tâches dans des systèmes multi-thread. mon idée est d'avoir une file d'attente locale par thread, chaque thread va chercher le travail de sa file d'attente locale. Mais lorsque le thread atteint un certain seuil, il ne devrait pas aller chercher le travail, il devrait plutôt transférer le travail à un thread qui est en dessous du seuil.Planification de tâches dans des multithreads

Mon doute est de savoir comment définir le seuil pour les threads.

+2

Il n'y a pas suffisamment d'informations pour répondre à votre question. Vous n'avez pas spécifié la plate-forme ou le langage de programmation que vous utilisez, pour commencer, et je ne sais pas ce que vous entendez par "seuil". –

+0

Je travaille sur le langage de programmation C++ dans Microsoft Visual Studio. Et seuil dans le sens, quand un thread est très occupé, il ne devrait plus aller chercher les tâches, il devrait plutôt transférer les tâches à un autre thread qui est inactif. Cela aide à équilibrer la charge entre les threads. Ma question est comment définir une limite qu'un thread n'acceptera plus de tâches. – Rd7

+0

s'il vous plaît laissez-moi savoir si ce n'est pas encore clair, merci – Rd7

Répondre

1

Une autre solution à ce problème consiste à donner aux threads qui ont terminé leur file d'attente la possibilité de travailler dans la file d'attente des autres. Ceci est mieux connu sous le nom de "Work Stealing" et est un algorithme d'ordonnancement bien connu, par ex.

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.38.8905

+0

ya je sais à propos de voler la tâche, mais cette méthode est plus frais généraux et ont une plus grande latence ..! mon idée proposée abaisserait les deux, mais j'ai ces doutes lors de la mise en œuvre – Rd7

+1

Je ne suis pas sûr de comprendre où la latence supplémentaire et les frais généraux sont impliqués dans "travail volant" vs "délégation de travail" (votre modèle). Pourriez-vous s'il vous plaît expliquer. –

+0

le vol de travail peut parfois conduire à des «vols à distance coûteux», comme le fil 1 est inactif et le fil 8 est occupé, voler du 1er au 8ème thread augmenterait la latence je suppose. – Rd7

0

Quelle bibliothèque threading utilisez-vous?

J'utilise deux bibliothèques OSS dans tous mes projets de threading TBB et Cilk Plus. Une fonctionnalité que ces runtimes de niveau supérieur fournissent est qu'ils planifient automatiquement les tâches sur les threads de manière à utiliser efficacement les ressources du processeur. Les temps d'exécution sont également très efficaces pour équilibrer la charge de nombreuses tâches.

www.threadingbuildblocks.org

www.cilkplus.org

Questions connexes