¿Qué ventajas hay en tener piscinas múltiples sobre una piscina individual?
que supone la mayoría de las piscinas de objetos que utilizamos, como el ThreadPool, se implementan como simple por simplicidad: en la que, los diseñadores de estas piscinas no vieron un propósito en multiinstancias piscinas tampoco.
Sin embargo, hay un puñado de lugares donde realmente tenemos varios grupos: grupos de aplicaciones IIS y grupos de conexiones de bases de datos.
piscinas aplicación
En IIS, puede configurar varios grupos de aplicaciones, por lo que las aplicaciones web relacionados todos corren en su propia piscina. Hay un par de ventajas a este diseño, y las ventajas que se pueden generalizar a las implementaciones de la piscina exterior de IIS:
piscinas múltiple objeto permitir un cierto grado de aislamiento, por lo que un error en una piscina no debería tener un impacto en objetos en otras piscinas.
Cada grupo puede ejecutarse bajo un usuario diferente, lo que le brinda diferentes niveles de seguridad en función de su grupo de aplicaciones.
Cada grupo puede tener un controlador diferente para errores.
Cada grupo puede ejecutarse con una versión diferente de .NET framework.
Cada grupo puede tener su propio tiempo de espera de HTTP.
piscinas de conexión
En SQL Server, varias llamadas a una conexión de base de datos puesta en común su uso para evitar la sobrecarga de crear una nueva conexión de base de datos en cada consulta, sin embargo, SQL Server creates a new pool per connection string. Me imagino que la razón de este diseño es el siguiente:
Cada grupo tiene una conexión a una instancia de base de datos específica. Si hubiera solo un grupo que contenga todas las conexiones, entonces necesitaría buscar a través de todas las conexiones hasta que encuentre la conexión que coincida con la cadena de conexión que ha solicitado. Como hay varios grupos por cadena de conexión, es más fácil extraer la primera conexión disponible de ese grupo en particular sin buscar otras conexiones.
En otras palabras, sospecho que SQL Server usa varios grupos de conexiones como una optimización para obtener rápidamente una conexión de base de datos.
También puedo imaginar que todas esas conexiones probablemente compartan algunos recursos específicos para su grupo de conexiones, lo que puede no ser posible con un grupo único. Por ejemplo, puede especificar el tamaño máximo de la agrupación de conexiones por cadena de conexión; es posible que no pueda controlar el número de conexiones simultáneas a una base de datos particular utilizando un diseño de grupo único.
cómo diseñar una piscina
Realmente no se puede elegir si desea tener múltiples piscinas o un solo grupo sin mirar lo que realmente necesita de su diseño.
Si tiene un grupo de objetos muy simple, es posible que pueda salirse con un diseño singleton. Si realmente necesita flexibilidad adicional, personalización o tal vez tiene una configuración realmente única, como un conjunto de objetos distribuidos en múltiples procesos o máquinas, definitivamente se beneficiaría de un diseño n-gleton.
¿Dónde está todo el mundo? –
Me pregunto si la forma en que he usado las agrupaciones de objetos (administración de memoria/vida útil de objetos simples y reutilizables) ha afectado la forma en que entiendo estas respuestas. Los pools de aplicaciones, los grupos de hilos, los pools de conexiones y mi comprensión de los pools de objetos me parecen manzanas y naranjas. –