Поиск руководств и информации о балансировке нагрузки между потоками

Я знаю, что термин «Балансировка нагрузки» может быть очень широким, но тема, которую я пытаюсь объяснить, более конкретна, и я не знаю правильная терминология. Я создаю набор серверных / клиентских приложений. Сервер должен уметь обрабатывать огромные объемы передачи данных, а также клиентские соединения, поэтому я начал изучать многопоточность.

По сути, есть 3 способа реализации какой-либо потоковой передачи для сервера ...

  • Один поток, обрабатывающий все запросы (нарушает назначение потока, если в системе зарегистрировано 500 клиентов)
  • Один поток на пользователя (что рискованно создавать по одному потоку для каждого из 500 клиентов)
  • Пул потоков которые делят работу поровну для любого количества клиентов (что я ищу)

Третий вопрос - это то, что я хотел бы знать. Это состоит из такой настройки:

  • Максимум 250 потоков, выполняемых одновременно
  • 500 клиентов не будут создавать 500 потоков, но будут совместно использовать 250
  • A Очередь запросов будет ожидающей передачи в поток
  • Поток не привязан к клиенту, и наоборот
  • Сервер решает, в какой поток отправить запрос, в зависимости от активности (баланс нагрузки).

В настоящее время я пока не ищу никакого кода, но информацию о том, как работает подобная установка, и желательно руководство по выполнению этого в Delphi (XE2). Даже подходящего слова или имени по этой теме было бы достаточно, чтобы я мог сам заняться поиском.

РЕДАКТИРОВАТЬ

Я счел необходимым немного объяснить, для чего это будет использоваться. Я буду транслировать как команды, так и изображения, будет установка с двумя сокетами, где есть один «Главный командный разъем» и другой «Дополнительный разъем для потоковой передачи изображений». Так что на самом деле одно соединение - это 2 соединения сокета.

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

Дело в том, что у меня уже есть механизм потоковой передачи в моей текущей настройке (1 поток на объект сеанса), и я хотел бы перенести его на многопоточную среду, подобную пулу. Два соединения вместе требуют высокоуровневого контроля над этими потоками, и я не могу полагаться на что-то вроде Indy, чтобы поддерживать их синхронизацию, я бы предпочел знать, как все работает, чем научиться доверять чему-то другому, чтобы выполнять работу за меня.

7
задан Jerry Dodge 28 February 2012 в 00:58
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: