Disons que je veux "mettre en pause" un thread afin que les autres threads puissent fonctionner plus efficacement. Quelle est la période de sommeil minimum avant de bloquer devient inutile (ou presque inutile)?Quelle est l'efficacité de Thread.sleep (long)?
Répondre
Je m'attendrais à ce que toute quantité de sommeil soit au moins l'équivalent fonctionnel de l'appel yield()
donc il n'y a jamais un point où il est "inutile". Il y a certainement un point où de petites valeurs sont essentiellement indiscernables parce que le temps d'attente pour que le système d'exploitation revienne à votre thread est plus long qu'un petit temps de sommeil. Cela se produit probablement quelque part dans la gamme 5-10, mais bien sûr, il sera spécifique à l'OS.
C'est difficile à généraliser et cela dépend de votre problème spécifique. Mais, je n'utiliserais pas toi-même pour gérer les discussions. Vous pouvez mettre les discussions dans un Executor
et laissez-les les gérer. Vous pouvez également utiliser une PriorityQueue pour commander vos tâches. Thread.sleep (0) entraînera le thread à céder, permettant à d'autres threads ayant la même priorité ou une priorité plus élevée de s'exécuter.
Cela dépend de la priorité des threads ... D'après ce que je comprends, Thread.sleep génère efficacement le thread et définit sa priorité sur la plus faible pour la durée de la veille.
Comme d'autres l'ont mentionné, vous ne devriez probablement pas utiliser ceci pour planifier vos threads manuellement. Il est utile cependant, si vous avez partagé des mutex, vous pouvez les libérer et ensuite faire un Thread.sleep pour aider à résoudre une situation de threadlock.
Il ne s'agit pas de planification; Il s'agit de gérer les ressources plus efficacement. – someguy
Je ne pense pas que les Executors peuvent prédire quand un thread est inactif (ou peuvent-ils?) – someguy