2010-07-29 7 views
-1

Combien de threads sur Java 1.7 sont capables de gérer? Dans le programme Web client/serveur, les clients peuvent se connecter au serveur. Cette connexion est statefull. Clients> 3000 par serveurCombien de threads peuvent être gérés dans Java 1.7?

+4

Combien en avez-vous? –

+0

Vous devez être plus précis je pense pour obtenir de bonnes réponses. Donnez un résumé de ce que vous essayez d'accomplir. – AaronLS

+0

Dans le programme Web Serveur/Client Les clients peuvent se connecter au serveur. Cette connexion est statefull. – DanialAbdi

Répondre

1

Java possède des API qui limitent le nombre de threads à Integer.MAX_VALUE. (~ 2 milliards)

Cependant, votre système d'exploitation/matériel sera la véritable restriction. Entre 100 et 10K sera votre limite en fonction de ce que vous faites.

Les threads sont généralement créés pour améliorer les performances. Cependant, ils ajoutent des frais généraux de sorte que vous atteindrez un point où l'ajout de threads diminuera les performances. Dans de rares cas, deux threads ne sont pas aussi bons qu'un. Le point où plusieurs threads nuisent aux performances dépend de votre application, de votre matériel et de la manière dont il est utilisé. Remarque: Si vous avez 16 cœurs logiques, il ne restera plus que 16 threads en cours à un moment donné.

-1

J'imagine que la limite supérieure a une certaine relation avec l'espace de tas disponible. Mais la limite réaliste a plus à voir avec le matériel sur lequel vous utilisez le système que la version de Java.

+1

Pas d'espace de tas. Sur les systèmes 32 bits, espace d'adressage virtuel pour les piles. –

1

Il n'y a pas encore de Java 1.7. Sur un système 64 bits, vous pouvez aller à des dizaines de milliers. Sur les systèmes 32 bits, vous êtes en grande partie limité aux espaces d'adresses virtuelles pour les piles.

Long page on the "c10k" problem.

+0

Merci pour votre lien. – DanialAbdi

1

En théorie? Milliers.

En pratique - dépend entièrement de votre système. Vous êtes plus susceptible de manquer de mémoire avant de manquer de threads.

3

"Assez". Si ce n'est pas le cas, vous utilisez des pools de threads avec un Executor approprié. Qu'est-ce que vous devez faire?

+0

Gestion des connexions – DanialAbdi

+0

Jetez un coup d'œil à JBoss Netty. http://jboss.org/netty –

-1

Chaque thread a son propre espace de pile. La pile est stockée en dehors du tas, mais dans la mémoire allouée par la machine virtuelle Java. Ainsi, les threads maximum sont généralement liés par la quantité de mémoire que le système d'exploitation peut allouer à la JVM. Sous Windows, cela correspond à environ 1 000 à 2 000 threads maximum avant que la mémoire de la JVM ne soit insuffisante.

+0

Les threads Java utilisent l'espace de pile alloué par le système d'exploitation, qui est __NOT__ affecté à la machine virtuelle Java. Il y a une petite quantité de mémoire JVM associée à chaque pile de threads, mais la pile réelle est allouée à la JVM à partir de la mémoire de processus OS __external__, ce qui fait que la JVM utilise moins de mémoire Xmx/Xms peut réellement augmenter le nombre de threads disponibles –

Questions connexes