|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.07.2015, 11:54 | #1 |
Пользователь
Регистрация: 17.10.2014
Сообщений: 17
|
TIdTelnetServer в INDY10 загружает процессор на простейшей задаче
Есть задача - машина-сервер, к которой по telnet подключаются клиенты. Всем подключенным клиентам отсылается одно и то же сообщение (текущий тайм-код, не суть) 25 раз в секунду.
Весь код сервера крутится в отдельном Thread'е. Проблема в том, что каждый подключившийся клиент добавляет примерно 15% загрузки процессора Core i7 То есть выглядит это примерно так: - нет клиентов, загрузка нулевая - подключился первый клиент - загрузка 15% - подключился второй клиент - загрузка 30% и т.д. Причём это не зависит от того - пересылаем мы что-нибудь по telnet или нет. Коннект произошёл - сразу загрузка процессора, независимо ни от чего. Что это? Кто-нибудь сталкивался? |
30.07.2015, 13:08 | #2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
30.07.2015, 14:27 | #3 |
Пользователь
Регистрация: 17.10.2014
Сообщений: 17
|
|
30.07.2015, 14:59 | #4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Ну нужно смотреть код... Если у тебя цикл бесконечный или долгий, то понятно что грузить будет.
I'm learning to live...
|
30.07.2015, 15:58 | #5 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Поменяйте полярность, пускай клиенты запрашивают данные когда им это надо, а не сервер раздает бесконечность в бесконечность.
|
30.07.2015, 16:15 | #6 | ||
Пользователь
Регистрация: 17.10.2014
Сообщений: 17
|
Цитата:
Код:
Цитата:
Да и вообще это не при чём - сама выдача данных проц не нагружает - я уже писал об этом. Последний раз редактировалось Stilet; 30.07.2015 в 16:51. |
||
30.07.2015, 16:21 | #7 | ||
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Цитата:
Цитата:
Принимать 25 в секунду можно, а просить нельзя? бред. И ещё, сокет блокирующий али не? Последний раз редактировалось Человек_Борща; 30.07.2015 в 16:25. |
||
30.07.2015, 16:34 | #8 | ||
Пользователь
Регистрация: 17.10.2014
Сообщений: 17
|
Никак не нагружает. Так как пока нет коннекта со стороны клиента - загрузка проца нулевая. А ведь цикл в это время точно также крутится.
Цитата:
Цитата:
|
||
30.07.2015, 16:37 | #9 | |||
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Ещё у вас куча ошибок по написанию истинных многопоточных приложений, всего 1 правило, и оно святое: Внутри контекта потока существует только контекст потока, любые обращения за пределы потока происходят через методы синхронизации.
Цитата:
Создать try/finally. Цитата:
Цитата:
Как минимум с того, что не убрав while false, от нагрузи вы не избавитесь. Последний раз редактировалось Человек_Борща; 30.07.2015 в 16:42. |
|||
30.07.2015, 17:13 | #10 |
Пользователь
Регистрация: 17.10.2014
Сообщений: 17
|
Всё, я разобрался. Оказывается TIdTelnetServer обязательно требуется обработчик OnExecute. Если он есть (даже пустой) - загрузка падает до нуля. Если его нет - что-то у него в мозгах портится. Добавил обработчик и всё прекрасно работает.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Зацикливание простейшей программы. | torren108 | Помощь студентам | 2 | 01.11.2011 19:02 |
литература про написание простейшей ос | lem | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 5 | 30.09.2011 18:16 |
Графика. Функции простейшей САПР. | Genco | Общие вопросы по программированию, компьютерный форум | 1 | 21.09.2011 10:31 |
Узнать на сколько загружает процессор какая-то программа.. | Человек_Борща | Общие вопросы Delphi | 7 | 19.09.2010 13:30 |
Загрузка Windows. Процесс svchost загружает процессор на 100 % | Манжосов Денис :) | Windows | 12 | 07.09.2010 14:27 |