

| стрелялки |
| спорт |
| драки |
| стратегии |
| гонки |
| логические |
| азартные |
| аркады |
| эротические |
| фильмы онлайн |
| Поток управления - TServerSocketThread |
|
Поток управления представляет собой логическое развитие класса TThread, подробно рассмотренного в главе 20 «Процессы и потоки в среде Windows». Поток управления является владельцем и единоличным командиром некоторого числа потоков обслуживания - TClientSocketThread. Продолжая ресто- ранную тематику, можно сравнить поток управления с метрдотелем. Если уж клиент преодолел швейцара, то метрдотель определит ему отдельный столик (поток обслуживания). Задача потока управления - предоставить каждому вошедшему в соединение сокету отдельный поток обслуживания. Сразу после старта приложения с появлением каждого нового сокета-клиента поток управления запускает очередной поток обслуживания. Естественно это не может продолжаться до бесконечности, т. к. количество одновременно обслуживаемых сокетов ограничивается вычислительными возможностями компьютера (или вместительностью ресторана). Пул потоков обслуживания доступен из свойства: property ThreadPool: TList; //только для чтения Размерность пула ограничивается свойством property ThreadCacheSize: Integer; По умолчанию пул может содержать всего десять экземпляров потока обслуживания. Поскольку процесс порождения (а затем и уничтожения) любого потока сопряжен с определенными затратами процессорного времени, то с разрывом соединения с клиентским сокетом экземпляр потока TClientSocketThread не уничтожается (не выносят же из ресторана свободные столики), а помещается в пул, где он будет ожидать очередного соединения. При поступлении заявки на обслуживание поток управления сначала просмотрит весь пул потоков обслуживания и при наличии там свободного потока отдаст его клиенту. Таким образом, за счет увеличения расхода памяти достигается некоторое повышение производительности в обслуживании соединений. За полную очистку пула от простаивающих потоков обслуживания отвечает метод: procedure ClearThreadPool; Поток управления всегда владеет информацией о сервере, которому он принадлежит. Для этого в классе TServerSocketThread объявлено свойство: property ServerSocket: TCustomTCPServer. |
