2017-05-21 4 views
0

Je comprends déjà que le forking et la jointure sont utilisés pour le multithread, mais je ne comprends pas ce qui se passe exactement lorsqu'une tâche est forkée. Est-ce que forking une tâche provoque cette tâche fourchue pour revenir au début de la méthode de calcul? Ou la tâche fait-elle autre chose? Si je veux qu'une tâche accède à une autre méthode que de la calculer et l'exécute en mode fork, comment lui dirais-je de faire cela? Y at-il une sorte d'extension à (instance).fork(); que je peux inclure pour le spécifier?Que se passe-t-il exactement lorsqu'une tâche est bifurquée?

Répondre

0

La tâche qui utilise la structure fork/join obtient effectivement split en sous-tâches plus petites de façon récursive, afin qu'elles puissent être exécutées simultanément. En forçant, chaque sous-tâche peut être exécutée par un processeur différent en parallèle, ou par des threads différents sur la même CPU. Une fois l'exécution de toutes les sous-tâches terminée, la partie join commence. Dans ce processus, les résultats de toutes les sous-tâches sont réunis récursivement en un seul résultat. Tout ce processus se passe 'en coulisses' et peut être implémenté en utilisant un pool de threads appelé ForkJoinPool qui gère les threads de type ForkJoinWorkerThread.

+0

Qu'arrive-t-il à ces sous-tâches lorsque la tâche est forkée? Est-ce qu'ils commencent immédiatement à exécuter une autre fonction, ou doivent-ils être appelés à faire quelque chose avec eux? Pouvez-vous expliquer un peu plus complètement? – JKristol

+0

S'il vous plaît voir ma réponse mise à jour ci-dessus. –

+0

Pouvez-vous donner un exemple de la façon dont ces threads individuels peuvent être exécutés? Je ne comprends pas encore tout à fait. Ce que j'essaie de savoir, c'est où vont les fils fourchus dans le code. Je ne suis pas sûr si les threads fourchus redémarrent la méthode de calcul ou s'ils restent inactifs jusqu'à l'appel. – JKristol