2 votes

Est-il cher de créer l'objet Thread ou de démarrer réellement le fil?

Considérez cette question.

Il existe diverses raisons pour lesquelles la création d'un thread est coûteuse, notamment le fait qu'une grande quantité de mémoire doit être allouée et que le thread doit être enregistré.

Maintenant, considérez ce code :

Thread thread = new Thread(new SomeRunnable());
thread.start();

Quelle partie de cela est considérée comme "coûteuse"? La ligne qui crée effectivement l'objet Thread ou la ligne qui démarre le thread? Ou les deux? La raison pour laquelle je pose la question est que j'écris le composant serveur d'un jeu et je me demande si je dois créer l'objet Thread dès la connexion du joueur et démarrer le thread une fois que le joueur a terminé sa connexion, ou si je dois à la fois créer et démarrer le thread après que le joueur ait terminé sa connexion.

11voto

Tomasz Nurkiewicz Points 140462

Créer un objet Thread est très bon marché. Vous ne payez que le prix de l'appel au constructeur. C'est la méthode start() qui prend de la place (appels natifs, mémoire de la pile, etc.)

En revanche, si vous créez beaucoup de threads, envisagez de les créer (et de les démarrer) à l'avance et d'avoir un pool. Cela est déjà fait pour vous, consultez la classe Executors.

4voto

Gray Points 58585

Cela ressemble vraiment à une optimisation prématurée pour moi. Je doute vraiment que vous remarquiez une différence entre instancier ou démarrer le thread plus tôt plutôt que plus tard. S'il y avait 100 threads alors je pourrais penser différemment.

Si vous avez rencontré des problèmes de performance avec votre application, je vous encourage à utiliser un profileur pour découvrir les véritables goulets d'étranglement de performance.

1voto

Rob Points 3700

Si vous voulez éviter le coût de la création de threads, utilisez un pool de threads. Je suis d'accord avec @Gray cependant. Comme un pool de connexions, un pool de threads vous empêche de créer des choses encore et encore (et il empêche le nombre de threads de croître de manière incontrôlable).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X