Процессорное время
От: Rosigma Украина http://rosigma.com/
Дата: 06.02.04 13:44
Оценка:
Привет!
Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах?
А то все "висит", пока эти вычисления происходят. Как от этого избавиться?
Вопрос общий, но пишу на С++ (может, есть особенности).
Roman Yakhymets, http://rosigma.com/, All inside you, ICQ #214741007
Re: Процессорное время
От: WolfHound  
Дата: 06.02.04 14:01
Оценка: :)
Здравствуйте, Rosigma, Вы писали:

R>Привет!

R>Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах?
R>А то все "висит", пока эти вычисления происходят. Как от этого избавиться?
R>Вопрос общий, но пишу на С++ (может, есть особенности).
Приоритет Idle установить не пробовал?
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Процессорное время
От: Аноним  
Дата: 09.02.04 16:51
Оценка:
Здравствуйте, Rosigma, Вы писали:

R>Привет!

R>Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах?
R>А то все "висит", пока эти вычисления происходят. Как от этого избавиться?
R>Вопрос общий, но пишу на С++ (может, есть особенности).
В отдельном потоке...
Re[2]: Процессорное время
От: ArtDenis Россия  
Дата: 09.02.04 17:48
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Приоритет Idle установить не пробовал?


Самое интересное, что даже в этом случае оно будет съедать 100% процессора
... << RSDN@Home 1.1.2 stable >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[3]: Процессорное время
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.02.04 18:58
Оценка:
Здравствуйте, ArtDenis, Вы писали:
AD>Самое интересное, что даже в этом случае оно будет съедать 100% процессора
Зато "все" висеть не будет
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Процессорное время
От: AndreyFedotov Россия  
Дата: 10.02.04 09:11
Оценка:
Здравствуйте, Rosigma, Вы писали:

R>Привет!

R>Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах?
R>А то все "висит", пока эти вычисления происходят. Как от этого избавиться?
R>Вопрос общий, но пишу на С++ (может, есть особенности).

Простейшее решение:
while( bItShouldWork )
{
    Sleep( TimeSleep );
    SuspendAllThreads();
    Sleep( TimeWork );
    ResumeAllThreads();
}

В этом случае использование процессора составит (грубо) от 0 до TimeWork / ( TimeSleep + TimeWork ) времени.
Re[2]: Процессорное время
От: jazzer Россия Skype: enerjazzer
Дата: 13.02.04 09:18
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, Rosigma, Вы писали:


R>>Привет!

R>>Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах?
R>>А то все "висит", пока эти вычисления происходят. Как от этого избавиться?
R>>Вопрос общий, но пишу на С++ (может, есть особенности).
WH>Приоритет Idle установить не пробовал?

Достаточно даже below normal :)
По крайней мере, я такой приоритет выставляю в виртуальном дубе, когда конверчу видео (прога работает порядка часа), и у меня ничего не тормозит.

А у винампа наоборот выставляю high, тогда он не затыкается при скроллинге и прочей байде, которую я с компом творю :)
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Процессорное время
От: Calc Россия  
Дата: 14.02.04 21:43
Оценка:
Здравствуйте, Rosigma, Вы писали:

R>Привет!

R>Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах?
R>А то все "висит", пока эти вычисления происходят. Как от этого избавиться?
R>Вопрос общий, но пишу на С++ (может, есть особенности).

Значит не читаем Рихтера
Хорошо описана работа планировщика задач
Берём и создаём отдельный поток для вычислительных задач и делаем ему приоритет ниже нормального.
О синхронизации ищите информацию сами, помоему тут где то в статьях должна валяться, так же была в журнале Программист (programme.ru момоему).
Флудеров много тут развелось
Re: Процессорное время
От: Calve США  
Дата: 16.02.04 11:15
Оценка:
Здравствуйте, Rosigma, Вы писали:

R>Привет!

R>Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах?
R>А то все "висит", пока эти вычисления происходят. Как от этого избавиться?
R>Вопрос общий, но пишу на С++ (может, есть особенности).


DВ системе должен быть какая-то галочка, может движок. (В ОС). Win 2000, по умолчанию, похоже ресурсы процессора распределяет автоматически равномерно между задачами.
И еще? приоритет задачи должен где-то указываться. Обычно это пишутт в директивах компилятора в тексте программы.
Re[2]: Процессорное время
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.02.04 05:12
Оценка: :)
Здравствуйте, Calve, Вы писали:
C>И еще? приоритет задачи должен где-то указываться. Обычно это пишутт в директивах компилятора в тексте программы.
Нет, обычно это пишут в свойствах шортката, который эту программу запускает.
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: Процессорное время
От: dshe  
Дата: 17.02.04 08:07
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Calve, Вы писали:

C>>И еще? приоритет задачи должен где-то указываться. Обычно это пишутт в директивах компилятора в тексте программы.
S>Нет, обычно это пишут в свойствах шортката, который эту программу запускает.

А где? Я не нашел (может надо где-то еще какой-то чекбокс поставить, чтобы приоритет задачи появился в свойствах шортката?)
--
Дмитро
Re[4]: Процессорное время
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.02.04 08:35
Оценка: 2 (1)
Здравствуйте, dshe, Вы писали:

D>А где? Я не нашел (может надо где-то еще какой-то чекбокс поставить, чтобы приоритет задачи появился в свойствах шортката?)

Упс, виноват. И правда нету. Я обычно если надо управлять приоритетом приложения, запускаю его из командной строки. у команды start есть ключики, которые определяют приортиет (см. help start). Честно говоря, я ожидал, что все они в шорткутах продублированы. Ан нет, только рабочий фолдер там и есть.
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Процессорное время: Sleep(50) Rulez!
От: Gaperton http://gaperton.livejournal.com
Дата: 18.02.04 17:23
Оценка:
Здравствуйте, Rosigma, Вы писали:

R>Привет!

R>Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах?
R>А то все "висит", пока эти вычисления происходят. Как от этого избавиться?
R>Вопрос общий, но пишу на С++ (может, есть особенности).

Гы-гы, поставь Sleep(50) внутри вычислительных циклов

А на самом деле вычисления надо запускать отдельным потоком. И 100% процессорного времени здесь совершенно не причем (что станет очевидно, если использовать Sleep(50) ).
Re[2]: Процессорное время: Sleep(50) Rulez!
От: Gaperton http://gaperton.livejournal.com
Дата: 18.02.04 17:26
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Здравствуйте, Rosigma, Вы писали:


R>>Привет!

R>>Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах?
R>>А то все "висит", пока эти вычисления происходят. Как от этого избавиться?
R>>Вопрос общий, но пишу на С++ (может, есть особенности).

G>Гы-гы, поставь Sleep(50) внутри вычислительных циклов


G>А на самом деле вычисления надо запускать отдельным потоком. И 100% процессорного времени здесь совершенно не причем (что станет очевидно, если использовать Sleep(50) ).


А этому потоку легко можно понизить приоритет.
Re[2]: Процессорное время: Sleep(50) Rulez!
От: Аноним  
Дата: 20.02.04 10:52
Оценка:
Здравствуйте, Gaperton, Вы писали:


G>Гы-гы, поставь Sleep(50) внутри вычислительных циклов


G>А на самом деле вычисления надо запускать отдельным потоком. И 100% процессорного времени здесь совершенно не причем (что станет очевидно, если использовать Sleep(50) ).

Да уже Sleep(0) дает хороший эффект
Re[2]: Процессорное время: Sleep(50) Rulez!
От: gandalf_g Россия  
Дата: 20.02.04 11:25
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Гы-гы, поставь Sleep(50) внутри вычислительных циклов


G>А на самом деле вычисления надо запускать отдельным потоком. И 100% процессорного времени здесь совершенно не причем (что станет очевидно, если использовать Sleep(50) ).


You have to be careful when using Sleep and code that directly or indirectly creates windows. If a thread creates any windows, it must process messages.

Sleep в этих случаях жрет проц не хуже обычного цикла, также приложение просто виснет пока Sleep не завершится

лучше таки использовать отдельный поток с уменьшенным приоритетом
Have fun...
Re[3]: Процессорное время: Sleep(50) Rulez!
От: Gaperton http://gaperton.livejournal.com
Дата: 25.02.04 11:28
Оценка:
Здравствуйте, gandalf_g, Вы писали:

_>Здравствуйте, Gaperton, Вы писали:


G>>Гы-гы, поставь Sleep(50) внутри вычислительных циклов


G>>А на самом деле вычисления надо запускать отдельным потоком. И 100% процессорного времени здесь совершенно не причем (что станет очевидно, если использовать Sleep(50) ).


_>

You have to be careful when using Sleep and code that directly or indirectly creates windows. If a thread creates any windows, it must process messages.

_>Sleep в этих случаях жрет проц не хуже обычного цикла, также приложение просто виснет пока Sleep не завершится
Это, кстати, не одно и то же. Приложение (вернее, поток) виснет, но проц при этом (!) — не жрет! Время отклика и загрузка процессора — разные вещи, что и должен был иллюстрировать пример со Sleep. Это хорошо, если процессор загружен на 100% по делу.

_>лучше таки использовать отдельный поток с уменьшенным приоритетом

Отдельный. А приоритет уменьшать только по показаниям в соответствии с клинической картиной. Самолечением не заниматься
Re[4]: Процессорное время: Sleep(50) Rulez!
От: gandalf_g Россия  
Дата: 25.02.04 12:25
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Это, кстати, не одно и то же. Приложение (вернее, поток) виснет, но проц при этом (!) — не жрет! Время отклика и загрузка процессора — разные вещи, что и должен был иллюстрировать пример со Sleep. Это хорошо, если процессор загружен на 100% по делу.


решил капнуть в сторону Sleep, добрался до ntdll а там

.text:77F89153 ZwDelayExecution proc near              ; CODE XREF: sub_77F85C00+3Dp
.text:77F89153                                         ; .text:77F92899p ...
.text:77F89153 
.text:77F89153 arg_0           = byte ptr  4
.text:77F89153 
.text:77F89153                 mov     eax, 32h        ; NtDelayExecution
.text:77F89158                 lea     edx, [esp+arg_0]
.text:77F8915C                 int     2Eh             ; DOS 2+ internal - EXECUTE COMMAND
.text:77F8915C                                         ; DS:SI -> counted CR-terminated command string
.text:77F8915E                 retn    8
.text:77F8915E ZwDelayExecution endp


INT 2eH: выполнить команду DOS (нет в документации)
Это НЕДОКУМЕНТИРОВАННОЕ прерывание выполняет команду DOS, как если бы эта команда была введена в ответ на подсказку DOS.


вот вам и ДОС рулез форева. че там дальше происходит остается только догадываться
Have fun...
Re[5]: Процессорное время: Sleep(50) Rulez!
От: dshe  
Дата: 25.02.04 12:32
Оценка: +1 :)
Здравствуйте, gandalf_g, Вы писали:

_>решил капнуть в сторону Sleep, добрался до ntdll а там


_>

INT 2eH: выполнить команду DOS (нет в документации)
_>Это НЕДОКУМЕНТИРОВАННОЕ прерывание выполняет команду DOS, как если бы эта команда была введена в ответ на подсказку DOS.


_>вот вам и ДОС рулез форева. че там дальше происходит остается только догадываться


Ядро операционной системы именно таким образом (через прерывания) и получает управление. Это вовсе не пережиток DOS -- это особенности архитектуры процессора.
--
Дмитро
Re[5]: Процессорное время: Sleep(50) Rulez!
От: Gaperton http://gaperton.livejournal.com
Дата: 25.02.04 12:47
Оценка:
Здравствуйте, gandalf_g, Вы писали:

_>Здравствуйте, Gaperton, Вы писали:


G>>Это, кстати, не одно и то же. Приложение (вернее, поток) виснет, но проц при этом (!) — не жрет! Время отклика и загрузка процессора — разные вещи, что и должен был иллюстрировать пример со Sleep. Это хорошо, если процессор загружен на 100% по делу.


_>решил капнуть в сторону Sleep, добрался до ntdll а там


_>
.text:77F89153 ZwDelayExecution proc near              ; CODE XREF: sub_77F85C00+3Dp
_>.text:77F89153                                         ; .text:77F92899p ...
_>.text:77F89153 
_>.text:77F89153 arg_0           = byte ptr  4
_>.text:77F89153 
_>.text:77F89153                 mov     eax, 32h        ; NtDelayExecution
_>.text:77F89158                 lea     edx, [esp+arg_0]
_>.text:77F8915C                 int     2Eh             ; DOS 2+ internal - EXECUTE COMMAND
_>.text:77F8915C                                         ; DS:SI -> counted CR-terminated command string
_>.text:77F8915E                 retn    8
_>.text:77F8915E ZwDelayExecution endp


_>

INT 2eH: выполнить команду DOS (нет в документации)
_>Это НЕДОКУМЕНТИРОВАННОЕ прерывание выполняет команду DOS, как если бы эта команда была введена в ответ на подсказку DOS.


_>вот вам и ДОС рулез форева. че там дальше происходит остается только догадываться


Давайте я попробую догадаться . Дальше, мне думается, там происходит то же самое, что и во всех остальных операционных системах, а именно: текущий поток(процесс) на заданное время исключается из цикла работы планировщика задач, что приводит к тому, что поток не получает ни одного кванта процессорного времени заданное количество милисекунд. А дальше как получится, на общих основаниях
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.