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

Хочешь увидеть код, где нет sleep? У меня весь такой код в боевых условиях. Sleep только для тестов и отладки.

Если не умеешь без sleep, то дело твое, но не стоит учить плохому остальных.
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053438
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, sleep-ом не только "неофиты" балуются...

Другое дело, что это иногда выходит за пределы тестов:
Давно уже волновала лучшие умы нашей конторы проблема - почему Oracle Reports на Linux стартует на полминуты дольше, чем на винде? Из-за этого даже в своё время от его использования отказались.

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

(gdb) disassemble rxmrun rxmrun+50
Dump of assembler code from 0x40398cd0 to 0x40398d02:

... (не очень интересно) ...

0x40398ce9 <rxmrun+25>: push 30
0x40398ceb <rxmrun+27>: call 0x8054eb8 <sleep>



То есть кто-то из индусских жрецов Оракла просто написал

sleep (30);


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

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

так покажи код, который отвечает за распределение нагрузки на проц и его ядра в потоках . Или ты делаешь всё в стиле разработчиков на электоне, которые о ресурсах компа вообще не думают? Хавает сервис проц в простое - плевать?))))
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053451
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2
Хавает сервис проц в простое

У меня так не получается, потому и показывать нечего.

Но если придумать задачу по твоему описанию: то это доп поток, который не спит, а ждет события с нужным таймаутом, например. И событие не всегда о работе, а иногда и об окончании работы. Sleep-же просто крадет время, на которое поток выбывает из цикла.
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053452
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2,

имеется ввиду всего лишь замена Sleep на MsgWaitForXXX и код сразу становится кошерным
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053455
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman
Кстати, sleep-ом не только "неофиты" балуются...

Другое дело, что это иногда выходит за пределы тестов:
Давно уже волновала лучшие умы нашей конторы проблема - почему Oracle Reports на Linux стартует на полминуты дольше, чем на винде? Из-за этого даже в своё время от его использования отказались.

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

(gdb) disassemble rxmrun rxmrun+50
Dump of assembler code from 0x40398cd0 to 0x40398d02:

... (не очень интересно) ...

0x40398ce9 <rxmrun+25>: push 30
0x40398ceb <rxmrun+27>: call 0x8054eb8 <sleep>



То есть кто-то из индусских жрецов Оракла просто написал

sleep (30);


Интересно бы посмотреть в его однопиксельные глаза и задать ему пару вопросов.


Там какой-то свой sleep? Потому что системный же в мсек параметр принимает. А 30мс никто не заметит
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053463
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2
И я очень хочу увидеть реальный код балансировки использования процессоров в потоках у супер мега экспертов, не признающих sleep. А то слов много, реального кода - 0.
Какой нафиг sleep?! За это надо сразу убивать. Обычно используют группу вызовов xxxWaitForxxx.
Рихтер, Кларк "Программирование серверных приложений для Microsoft Windows 2000" ещё актуальна.
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053479
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57
asutp2
И я очень хочу увидеть реальный код балансировки использования процессоров в потоках у супер мега экспертов, не признающих sleep. А то слов много, реального кода - 0.
Какой нафиг sleep?! За это надо сразу убивать. Обычно используют группу вызовов xxxWaitForxxx.
Рихтер, Кларк "Программирование серверных приложений для Microsoft Windows 2000" ещё актуальна.
Не вопрос, расскажи мне как нубу конкретный вызов xxxWaitForxxx в TServiceThread.Execute. Напоминаю, речь идет о стандартном потоке TServiceThread в TService, а не о дочерних порождаемых потоках внутри сервиса))))))
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053483
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Barmaley57
Какой нафиг sleep?! За это надо сразу убивать. Обычно используют группу вызовов xxxWaitForxxx.

Sleep тоже WaiFor... WaitFor[timer]
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053486
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Barmaley57
Какой нафиг sleep?! За это надо сразу убивать. Обычно используют группу вызовов xxxWaitForxxx.

Sleep тоже WaiFor... WaitFor[timer]

Не тоже.

Давай без флуда.
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053490
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2
Иных сигналов нет.
Это ложное утверждение. Других сигналов миллион. В зависимости от того, что делает сервис. Это может быть событие от сокета, событие файловой системы, уведомление таймера...
asutp2
И я очень хочу увидеть реальный код балансировки использования процессоров в потоках у супер мега экспертов, не признающих sleep
Чтобы ответить на этот вопрос нужно получить ответ на такой
asutp2
осле выполнения задачи и до перехода к следующему выполнению задачи
каким образом сервис понимает, что нужно приступить к выполнению второй задачи?
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053493
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
Но если придумать задачу по твоему описанию: то это доп поток, который не спит, а ждет события с нужным таймаутом, например. И событие не всегда о работе, а иногда и об окончании работы. Sleep-же просто крадет время, на которое поток выбывает из цикла.

1. Доп.поток - это TServiceThread, интегрированный в TService
2. TServiceThread.Execute ждет исключительно Terminate, остальные события приостановки/возобновления/рестарта - в ProcessRequests
3. Sleep возвращает ресурсы. Если помним, исходная проблема заключалась в том, что загрузка проца у службы была 15-20%. Начали делится ресурсами, загрузка стала 0%. И кого тут после этого нужно убивать? Тех, кто плюет на распределение ресурсов железа.
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053500
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
asutp2
Иных сигналов нет.
Это ложное утверждение. Других сигналов миллион. В зависимости от того, что делает сервис. Это может быть событие от сокета, событие файловой системы, уведомление таймера...
Ты утверждаешь, что эти события относятся именно к TServiceThread, а не соответствующим дочерним потокам, отвечающих за соотвествующую обработку?

_Vasilisk_
asutp2
И я очень хочу увидеть реальный код балансировки использования процессоров в потоках у супер мега экспертов, не признающих sleep
Чтобы ответить на этот вопрос нужно получить ответ на такой
asutp2
осле выполнения задачи и до перехода к следующему выполнению задачи
каким образом сервис понимает, что нужно приступить к выполнению второй задачи?
Диспетчеризацией выполнения задач занимается дочерний поток/потоки, порожденный(порожденные) при создании экземпляра TService. Взаимодействуя с ним (ними), TServiceThread.Execute использует MsgWaitForXXX.

Но вопрос то заключается в том, как сам TServiceThread управляет нагрузкой на проц при собственном исполнении? Учитывая, что на современных процах код внутри исполняется за маленькое число тиков и с точки зрения системы аналогично
Код: pascal
1.
2.
while not terminated do
  a := a + 0;

в итоге имеем, что загрузка на ядре, на котором выполняется TServiceThread.Execute, становится недопустимо большой.
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053503
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2
Не вопрос, расскажи мне как нубу конкретный вызов xxxWaitForxxx в TServiceThread.Execute.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure ServiceExecute....
begin
  while not Terminated do
  begin
    if MsgWaitForMultipleObjects(n,handles[..],false,timeOut,QS_xxx)=yyy then zzz
    ...    
    ServiceThread.ProcessRequests(false);
    ...
  end;
end;
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053504
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2
Ты утверждаешь, что эти события относятся именно к TServiceThread, а не соответствующим дочерним потокам, отвечающих за соотвествующую обработку?
asutp2
загрузка на ядре, на котором выполняется TServiceThread.Execute, становится недопустимо большой.
Уже неоднократно говорили: про ServiceExecute забыть вообще. В ServiceStart запускать свой поток, в ServiceStop его останавливать
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053510
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Уже неоднократно говорили: про ServiceExecute забыть вообще. В ServiceStart запускать свой поток, в ServiceStop его останавливать
Аргументация данного подхода? Пруфы на стековерфлоу, эмбу? Лично я не вижу необходимости повторять реализацию TServiceThread, он прекрасно справляется со своей задачей
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053511
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2
TServiceThread, он прекрасно справляется со своей задачей
asutp2
TServiceThread.Execute ждет исключительно Terminate
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053515
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57
Код: pascal
1.
    if MsgWaitForMultipleObjects(n,handles[..],false,timeOut,QS_xxx)=yyy then zzz

прекрасно, учитывая что TServiceThread дочерние потоки как правило нужны только при завершении работы. Соответственно, а какие хэндлы передавать в MsgWaitForMultipleObjects (которых нет) при каждой итерации в нормальном режиме работы?)

Такое ощущение, что мне лечат за работу дочерних потоков в обычных приложениях, не понимая сути проблемы.
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053516
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
asutp2
TServiceThread, он прекрасно справляется со своей задачей
asutp2
TServiceThread.Execute ждет исключительно Terminate
и? ты предлагаешь, чтобы я запускал свой поток, который работает точно так же как TServiceThread? )))
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053517
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но не забываем о сути проблемы, а именно о использовании ресурсов процессора. Как то все скромно этот вопрос умалчивают. Первый раз слышим, что нужно грамотно работать с ресурсами компов?
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053521
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2
yemets63,

добавь Sleep(100) после ProcessRequests


Бизи вейты во сне и наяву...
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053522
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
..
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053528
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2
Такое ощущение, что мне лечат за работу дочерних потоков в обычных приложениях, не понимая сути проблемы.
Такое ощущение, что ты знаешь много "умных" слов (типа ресурсы компов и т.д.), но не знаешь, что с этим делать...
...
Рейтинг: 0 / 0
пустой Service кушает до 15% ресурсов CPU
    #40053530
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2
Соответственно, а какие хэндлы передавать в MsgWaitForMultipleObjects
Да, собственно, любые хэндлы, которые сигнализируют твоему сервису, что нужно проснуться и выполнить работу, а не дёргаться постоянно в sleep'ах
...
Рейтинг: 0 / 0
25 сообщений из 166, страница 2 из 7
Форумы / Delphi [игнор отключен] [закрыт для гостей] / пустой Service кушает до 15% ресурсов CPU
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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