powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / пустой Service кушает до 15% ресурсов CPU
25 сообщений из 166, страница 1 из 7
пустой Service кушает до 15% ресурсов CPU
    #40053303
yemets63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему нагрузка на CPU 10 - 15%.
показываю пустой Service, он работает, и он как полный с моим функционалом, так и пустой кушат 10-15% CPU, и максимально потребляет энергию по GPU и CPU.
я может не знаю, может какие то ключи надо поставить
антивирусником все прогнал, службу в исключения внес, служба запускается, могу остановить, перезапустить. к функционалу службы вопросов нет.

вот текст:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  ServiceApplication.Controller(CtrlCode);
end;

function TServiceApplication.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;

procedure TServiceApplication.ServiceExecute(Sender: TService);
begin
  while terminated = false do
  begin
    ServiceThread.ProcessRequests(false);
  end;
end;

procedure TServiceApplication.ServiceStart(Sender: TService;
  var Started: Boolean);
begin
  Started := true;
end;

procedure TServiceApplication.ServiceStop(Sender: TService;
  var Stopped: Boolean);
begin
  Stopped := true;
end;
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053305
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ведь тебя предупреждали не пользоваться ProcessMessages и компанией...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053306
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yemets63,

добавь Sleep(100) после ProcessRequests
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053307
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yemets63,

так это, цикл
Код: pascal
1.
2.
3.
4.
  while terminated = false do
  begin
    ServiceThread.ProcessRequests(false);
  end;



шарашит без перерыва, и на 100% грузит одно ядро. Ничего удивительного. imho то же самое, что в бесконечном цикле зарядить
a:=a + 0;
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053308
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yemets63
Код: pascal
1.
2.
3.
4.
5.
6.
7.
procedure TServiceApplication.ServiceExecute(Sender: TService);
begin
  while terminated = false do
  begin
    ServiceThread.ProcessRequests(false);
  end;
end;



Что это за д. вечный цикл? Зачем вообще этот бред?
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053317
yemets63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
цикл стоит для примера, к сожалению не могу показать полный текст функционала, хотя отдельно функционал не грузит проц вообще, а как вставляю в Execute так 14%. в нем нет зацикливаний.
сижу по шагам проверяю поведение функционала в Service.
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053320
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yemets63
отдельно функционал не грузит проц вообще
Проц грузит постоянный вызов "функционала" в бесконечном цикле.
Просто while True do; будет грузить точно так же.
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053321
yemets63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
когда вырезал код, немного ошибся,

asutp2, спасибо за sleep

я даже убрал Timer который мне не особо был нужен, и вставил в цикл, чего не было, но вставил в пример,
в итоге, еле-еле службу нашел, 0% и работает очень даже классненько, раздает и получает, слышить и посылает, и всегда CPU=0%.

Код: plsql
1.
2.
3.
4.
5.
6.
  while not Terminated do 
  begin
    ... функционал
    ServiceThread.ProcessRequests(true); 
    sleep(100);
  end;
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053322
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yemets63
когда вырезал код, немного ошибся,

asutp2, спасибо за sleep

я даже убрал Timer который мне не особо был нужен, и вставил в цикл, чего не было, но вставил в пример,
в итоге, еле-еле службу нашел, 0% и работает очень даже классненько, раздает и получает, слышить и посылает, и всегда CPU=0%.

Код: plsql
1.
2.
3.
4.
5.
6.
  while not Terminated do 
  begin
    ... функционал
    ServiceThread.ProcessRequests(true); 
    sleep(100);
  end;

Вообще да, чем больше sleep-ов в коде - тем меньше процесс жрет процессор. Можно их еще превентивно расставлять между строками алгоритмов.
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053324
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yemets63цикл стоит для примера,

А вставка Sleep() в несуществующий цикл помогла. Чудны дела твои...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053326
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock> Можно их еще превентивно расставлять между строками алгоритмов.


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053379
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Вообще да, чем больше sleep-ов в коде - тем меньше процесс жрет процессор. Можно их еще превентивно расставлять между строками алгоритмов.
Видимо ты забываешь, что речь идет о сервисе , центральным потоком, с точки зрения реализации в делфи, является ServiceExecute. Единократный вызов sleep в каждом шаге while это весьма сбалансированное решение, и оно также отлично работает и при реализации демонов для линуса.

А если считаешь, что использование Sleep() в связке ProcessRequests является неправильным решением для уменьшения нагрузки на проц внутри ServiceExecute, тогда расскажи свое, "правильное". Будет весьма интересно услышать, как в главном потоке без UI и минимальным внешним воздействием от ОС на сервис ты разруливаешь дележку проца)))))
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053383
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2
YuRock
Вообще да, чем больше sleep-ов в коде - тем меньше процесс жрет процессор. Можно их еще превентивно расставлять между строками алгоритмов.
Видимо ты забываешь, что речь идет о сервисе , центральным потоком, с точки зрения реализации в делфи, является ServiceExecute. Единократный вызов sleep в каждом шаге while это весьма сбалансированное решение, и оно также отлично работает и при реализации демонов для линуса.

А если считаешь, что использование Sleep() в связке ProcessRequests является неправильным решением для уменьшения нагрузки на проц внутри ServiceExecute, тогда расскажи свое, "правильное". Будет весьма интересно услышать, как в главном потоке без UI и минимальным внешним воздействием от ОС на сервис ты разруливаешь дележку проца)))))


1. Я никогда не использую ServiceExecute. В ServiceStart я запускаю свой поток, в ServiceStop - убиваю его.
2. Что такое ProcessRequests - я вообще не знаю, да и знать не хочу.
Ну это всё мои предпочтения. Не претендую на единственно правильные решения.

Вот самое главное.
Любой поток должен либо выполнять задачу, либо ждать сигнала, после которого либо завершаться, либо начинать выполнять очередную задачу. Для Sleep тут места нет.
Sleep допустимо применять в 3 случаях:
- Для осознанной передачи управления другому потоку (бывает такая необходимость) - Sleep( 0 );
- Для тестовых программ;
- Для программ типа такой:

Код: pascal
1.
2.
3.
4.
5.
6.
program pause;
uses Windows, SysUtils;
begin
  if ParamCount > 0 then
    Sleep( StrToIntDef( ParamStr( 1 ), 0 ) * 1000 );
end.
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053404
yemets63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и так в продолжении, теперь уже SLEEP
SLEEP- кстати чудная штука,
в моем SERVICE я попробовал 2 решения, свои потоки и ServiceExecute с использованием sleep,
мне всё одинаково, но ServiceExecute нравится больше.

и так о SLEEP, почему это чудная, парадоксальная и полезная штука.
году в 2004, тогда первые проекты огромные были, и я очень любил и люблю трехзвенку, и тогда уже года 4 был на DEVART, не помню как они тогда назывались, начал внедрять рабочую систему в Воркуте и на севере. Разработка нашей команды и уже пару лет проработавшая в центральном регионе России. Проблем до Воркуты не было.
Но там, на севере было что то, не то спутники советские, не то интернет за счет динамомашин, а трехзвенка любит постоянный коннект. скорость низкая и постоянные паузы. что делать? Проверять обрыв коннекта, сздавать и восстанавливать транзакции, или делать пакеты для локальной работы потом их гонять и сохранять, или искать другие решения...?
В итоге поехал я на север решать проблемы, Мирный, Архангельск, и т.д., да еще и зимой, и когда стал совсем замерзать, решил попробовать между вызовом метода сервера и использованием ClientDataSet вставлять sleep и всё это завернул в потоки. Так вот, при 256 Кбит с нестабильной связью это все ЗАработало. значением Sleep можно было управлять.
До 2011 года работа приложений-клиентов с серверов-прилоений была безупречно, ну и функционал тоже, потом потеряли контакт с заказчиком, смена хозяина, другие правила бизнеса, "грёбанные" торги...

так что sleep полезная вещь!
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053408
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
yemets63
а трехзвенка любит постоянный коннект

Тут некоторые люди переходят на "трехзвенку" из-за того, что не нужен постоянный коннект...
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053409
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yemets63
когда стал совсем замерзать, решил попробовать между вызовом метода сервера и использованием ClientDataSet вставлять sleep и всё это завернул в потоки. Так вот, при 256 Кбит с нестабильной связью это все ЗАработало. значением Sleep можно было управлять.
Я и говорю - использование Sleep как можно чаще - снижает нагрузку на железо, а сэкономленную таким образом электроэнергию можно использовать для обогрева окружающей среды, чтоб не замерзать.
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053410
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock1. Я никогда не использую ServiceExecute. В ServiceStart я запускаю свой поток, в ServiceStop - убиваю его.
воистину!
Кстати, я нашел аналогичное обсуждение, 5-летней давности, там такому же автору настучали канделябром.
https://stackoverflow.com/questions/33625164/service-application-in-delphi

Собственно, мораль такая, что если в ServiceExecute вызывать такой цикл, то никакой TThread не нужен. А надо наоборот - ServiceExecute не вызывать, и всё делать в TThread.Execute. Там тоже можно сделать бесконечный цикл с загрузкой 1 ядра на 100%, но это уже другой вопрос.
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053411
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настало время охуительных историй.
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053413
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

да по первому сообщению возникло впечатление, что автор вопроса не знает, что у него 6-ядерный проц, и как эти ядра загружаются.
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053414
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Давно про трехзвенку не баяли.
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053417
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не перевелись ещё любители запускать поток и следующей строкой ожидать его завершения...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053422
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Любой поток должен либо выполнять задачу, либо ждать сигнала, после которого либо завершаться, либо начинать выполнять очередную задачу. Для Sleep тут места нет.
А теперь расскажи мне в рамках применительно к сервису? Напомню, у сервиса и автоматически создаваемого и используемого в нем потока TServiceThread есть 5 управляющих событий, которыми ОС управляет службой. Иных сигналов нет.
Внутри TServiceThread.Execute вызывается пользовательский код, который снаружи может получить всего 1 управляющий сигнал - terminate. Всё. Без сигнала завершения, после выполнения задачи и до перехода к следующему выполнению задачи сервис должен делиться ресурсами с другими приложениями в системе. Я так и не увидел, а каким образом это делается антогонистами sleep?

kdv
Кстати, я нашел аналогичное обсуждение, 5-летней давности, там такому же автору настучали канделябром.
https://stackoverflow.com/questions/33625164/service-application-in-delphi
А я вот смотрю заплюсованное решение Remy Lebeau и вижу:
Код: pascal
1.
2.
3.
4.
5.
6.
while not Terminated do
  begin
    Workflow.InsertInFile;
    Workflow.InsertInDatabase;
    TThread.Sleep(3000);
  end;

Как интересно))))
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053433
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2
Внутри TServiceThread.Execute

Это часть кривой реализации для неофитов. Чтоб не сильно грузить их серое вещество сервисами и их внутренним миром. Считай, что это главный поток приложения. В нем sleep вреден в боевой обстановке.

Захочет винда твой сервис остановить, а он спит. И так три раза. И твой сервис помечается плохим словом.
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053434
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
asutp2
Внутри TServiceThread.Execute

Это часть кривой реализации для неофитов. Чтоб не сильно грузить их серое вещество сервисами и их внутренним миром. Считай, что это главный поток приложения. В нем sleep вреден в боевой обстановке.

Захочет винда твой сервис остановить, а он спит. И так три раза. И твой сервис помечается плохим словом.
Да неужели.
Что то я ни разу не сталкивался с тем, что мой сервис не отвечал виндам и соответственно был помечен плохими словами. В своих реализациях я точно также использую доппотоки для выполнения основного функционала, а TServiceThread.Execute служит исключительно для управления дочерними потоками.
А насчет неофитов, их серого вещества и прочего - это ты по своему личному опыту говоришь?)
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053435
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И я очень хочу увидеть реальный код балансировки использования процессоров в потоках у супер мега экспертов, не признающих sleep. А то слов много, реального кода - 0.
...
Рейтинг: 0 / 0
25 сообщений из 166, страница 1 из 7
Форумы / Delphi [игнор отключен] [закрыт для гостей] / пустой Service кушает до 15% ресурсов CPU
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]