Какой лучший алгоритм, чтобы найти бесплатное соединение в пуле? - PullRequest
1 голос
/ 09 ноября 2010

Мне нужно запрограммировать приложение, которое управляет пулом соединений. Я хотел бы знать, какие алгоритмы должны быть изучены.

Ответы [ 2 ]

4 голосов
/ 09 ноября 2010

Типичная реализация пула будет иметь свободный стек сегментов:

  • когда запрашивается соединение, вытолкнуть его из стека
  • когда соединение возвращается обратно в пул, поместите его в стек

Это способствует повторному использованию последнего использованного соединения, что хорошо для кэширования.

При установлении соединения с пользователем вы будете использовать RAII, чтобы он автоматически (и детерминированно) возвращался в пул при удалении всех ссылок на него.

Теперь вам решать, как обрабатывать события:

  • Запрос соединения, когда его нет в наличии (вы можете подождать, построить новое и т. Д ...)
  • Возвратите соединение, когда его уже много в стеке (мы хотим сохранить их так много?)

Это детали реализации вашего пула и должны быть адаптированы в зависимости от ваших требований.

2 голосов
/ 09 ноября 2010

Ну, здесь действительно нет необходимости в сложном алгоритме.Вам просто нужно два контейнера, один для использованных подключений и для бесплатных подключений.В начале все соединения находятся в свободной корзине.Если требуется соединение, вы берете одно из free bucket и кладете его в used Если он больше не используется, вы кладете его обратно в бесплатное ведро.

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