2010-07-24 7 views
4

Quelle est la différence exacte entre le pool d'objets et le pool de connexions? Y a-t-il une différence dans leur algorithme d'utilisation de la mémoire? Msdn indique que «Le regroupement d'objets vous permet de contrôler le nombre de connexions que vous utilisez, par opposition à la mise en pool de connexions, où vous contrôlez le nombre maximal de connexions atteint». Qu'est-ce que cela signifie exactement?pool d'objets vs pool de connexions

S'il vous plaît aidez-moi à clarifier ci-dessus.

+0

Quelle plateforme? Quelle langue? – Oded

Répondre

3

Un pool de connexions est un pool d'objets contenant des objets de connexion. "La mise en pool d'objets vous permet de contrôler le nombre de connexions que vous utilisez, par opposition à la mise en pool de connexions, où vous contrôlez le nombre maximal de connexions atteint." Un pool d'objets permet à une application de limiter le nombre d'instances utilisées à un moment donné. Si l'application a besoin de plus d'instances que la limite, le pool d'objets doit décider comment traiter ce problème. Il y a un certain nombre de stratégies possibles:

  • return null
  • lancer une exception
  • bloc jusqu'à ce qu'une instance est disponible
  • augmenter la taille de la piscine

Un pool de connexion est un pool d'objets, il a donc exactement la même décision à prendre.

Une implémentation spécifique d'un pool d'objets (ou pool de connexions) peut utiliser l'une quelconque de ces stratégies, ou plusieurs en combinaison. À mon avis, l'énoncé cité est trompeur à moins qu'il ne parle d'implémentations spécifiques.

A Simple Object Piscine Exemple

Une piscine a des paramètres de configuration. Un pool simple peut avoir un minimum_size et un maximum_size. Lorsque le pool est disponible pour la première fois, il contiendra des objets minimum_size. Lorsque les clients demandent ces objets, le pool contiendra moins d'objets non alloués. Ce nombre peut également augmenter lorsque les clients renvoient des objets dans le pool.

À un certain point, le pool peut atteindre un état dans lequel il n'a aucun objet non alloué, mais un ou plusieurs clients demandent un objet. À ce stade, tant que le pool n'a pas atteint maximum_size, il peut créer de nouveaux objets et les ajouter au pool. Il peut maintenant renvoyer des objets aux clients.

Si le pool a atteint la valeur maximum_size, il ne peut pas augmenter la taille du pool. Il doit donc traiter les clients d'une manière différente - disons qu'il génère une exception ObjectPoolExhausted.

Un peu plus tard, certains clients renvoient des objets dans le pool et peuvent continuer comme d'habitude jusqu'à ce qu'il ne dispose plus d'aucun objet.

Retour à la question

L'article MSDN dit que sa mise en œuvre du pool d'objet spécifique augmentera la taille de la piscine jusqu'à la valeur maximale spécifiée.Lorsque le maximum est atteint, contrairement à l'exemple ci-dessus, au lieu de lancer une exception, le client attend jusqu'à ce qu'un objet soit renvoyé au pool, puis le nouvel objet renvoyé au client en attente. L'article MSDN indique que son implémentation de pool de connexion spécifique ne possède pas de paramètre de taille maximale - il continuera à créer de nouvelles connexions pour répondre à la demande (il finira par atteindre certaines limites du système et la requête échouera d'une manière différente). t spécifié).

+0

Merci pour votre réponse Richj.Je suis encore confus.Une autre déclaration dans msdn dit "Lors de l'utilisation de la mise en commun des connexions, la création est sur le même thread, donc s'il n'y a rien dans le pool, une connexion est créée pour vous. Le pool peut créer un nouvel objet, mais si vous avez déjà atteint votre maximum, il vous donne à la place le prochain objet disponible: c'est un comportement crucial quand il faut beaucoup de temps pour créer un objet, mais ne l'utilisez pas long. " Richj si vous avez déjà mis en œuvre ceux-ci pouvez-vous s'il vous plaît dire exactement comment ils diffèrent. – Ritu

+0

Salut Ritu. Veuillez publier le lien vers l'article MSDN. Je pense qu'il est question d'implémentations spécifiques. Ces instructions sont incorrectes lorsqu'elles sont appliquées aux pools d'objets et de connexions dans le cas général. – richj

+0

Merci pour la réponse, le lien MSDN est http://msdn.microsoft.com/en-us/library/ff7105zk%28VS.80%29.aspx – Ritu

Questions connexes