пул объектов и пул соединений - PullRequest
4 голосов
/ 24 июля 2010

Какова точная разница между пулом объектов и пулом соединений? Есть ли разница в их алгоритме использования памяти. msdn говорит: «Пул объектов позволяет вам контролировать количество соединений, которые вы используете, в отличие от пула соединений, где вы контролируете максимальное достигнутое количество» Что именно это значит?

Пожалуйста, помогите мне уточнить выше.

1 Ответ

3 голосов
/ 24 июля 2010

Пул соединений - это пул объектов, который содержит объекты соединений.

"Пул объектов позволяет вам контролировать количество соединений, которые вы используете, в отличие от пула соединений, где вы контролируете максимальное достигнутое число. "

Пул объектов позволяет приложению одновременно ограничивать количество используемых экземпляров.Если приложению требуется больше экземпляров, чем предел, пул объектов должен решить, как решить эту проблему.Существует несколько возможных стратегий:

  • return null
  • бросать исключение
  • блок до тех пор, пока экземпляр не станет доступным
  • увеличить размерпул

Пул соединений - это пул объектов, поэтому он должен принять одно и то же решение.

В конкретной реализации пула объектов (или пула соединений) может использоваться любойодна из этих стратегий, или несколько в комбинации.

По моему мнению, приведенное утверждение вводит в заблуждение, если только речь не идет о конкретных реализациях.

Пример простого пула объектов

Пул имеет некоторые параметры конфигурации.Простой пул может иметь минимальный размер и максимальный размер.Когда пул будет впервые доступен для использования, он будет содержать объекты Minimum_Size.Поскольку клиенты запрашивают эти объекты, пул будет содержать меньше нераспределенных объектов.Это число также может увеличиваться, когда клиенты возвращают объекты в пул.

В какой-то момент пул может достичь состояния, когда у него нет нераспределенных объектов, но один или несколько клиентов запрашивают объект.На этом этапе, пока пул не достиг максимального размера, он может создавать некоторые новые объекты и добавлять их в пул.Теперь он может возвращать объекты клиентам.

Если пул достиг максимального размера, он не может увеличить размер пула, поэтому ему приходится обращаться с клиентами по-другому - скажем, он выбрасываетИсключение ObjectPoolExhausted.

Чуть позже некоторые клиенты возвращают объекты в пул, и он может продолжать работу, как обычно, до тех пор, пока у него снова не закончатся объекты.

Вернуться к вопросу

В статье MSDN говорится, что реализация конкретного пула объектов увеличит размер пула до указанного максимума.Когда достигается максимум, в отличие от приведенного выше примера, вместо выдачи исключения клиент заставляет ждать, пока объект не будет возвращен в пул, а затем передает вновь возвращенный объект ожидающему клиенту.

В статье MSDN говорится, что его конкретная реализация пула соединений не имеет параметра максимального размера - он будет продолжать создавать новые соединения для удовлетворения спроса (в конечном итоге он достигнет некоторого системного предела, и запрос будет отклонен каким-то образом, который не указан).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...