powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Есть ли в windows ограничение проц.времени на приложение ?
8 сообщений из 8, страница 1 из 1
Есть ли в windows ограничение проц.времени на приложение ?
    #38100805
parb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Есть программа, написана на delphi 2010, запускаю под windows 7.
Программа запускает 10 потоков которые обрабатывают некие данные и отдают сумму основному потоку, тот "суммирует" полученные данные со всех потоков и отображает результат. Всё работает, вычисляет и вроде проблем нет... но загрузка процессора в Windows ~ 15%. Мощности простаивают. Хочется заставить работать всё это дело быстрее.

Что я проделывал :

1. Пытался увеличить количество используемых потоков вплоть до 100, толку нет, в среднем получается что за единицу времени программа обрабатывает одинаковое количество заданий (данных). При этом загрузка процессора в Windows ~ 100%
2. Запускал несколько "клонов" программы. Реально помогает. До 8 клонов есть смысл запускать, т.е. количество обрабатываемых данных пропорционально возрастает. При этом загрузка процессора в Windows ~ 100%

Исходя из этого у меня два варианта :
а) слабое место это основной поток - который не успевает проссумировать то что ему отдают и потоки выстраиваются в очередь и простаивают.
б) windows не отдает одной программе процессорного времени больше какого-то лимита

Логичнее кажется вариант "а", но основной поток занимается только тем что получает только 1 цифру,складывает её с общей суммой и выводит в Caption формы... не вижу что здесь может настолько задерживать весь процесс.

Если есть идеи как определить проблемное место, подскажите пожалуйста.
Заранее благодарен.
...
Рейтинг: 0 / 0
Есть ли в windows ограничение проц.времени на приложение ?
    #38100813
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
parb,

для начала - попробуйте пореже выводить в Caption .
...
Рейтинг: 0 / 0
Есть ли в windows ограничение проц.времени на приложение ?
    #38100865
Multy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
parb,

Ограничения на процессорное время можно только за счёт приоритетов.

Тут же скорее Delphi глючит.

В студии 8 потоков акурат заняли все 8 ядер, причётм гдра как-то равномерно загружались.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim TH As New System.Threading.Thread(Sub()
                                            Dim i = 1
                                            While 1 = 1
                                              i += 1
                                              i -= 1
                                            End While
                                          End Sub) With {.IsBackground = True, .Priority = Threading.ThreadPriority.Lowest}
    TH.Start()
  End Sub
...
Рейтинг: 0 / 0
Есть ли в windows ограничение проц.времени на приложение ?
    #38100896
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
parbа) слабое место это основной поток - который не успевает проссумировать то что ему отдают и потоки выстраиваются в очередь и простаивают.
а каким образов потоки взаимодействуют?

уверен что проблема в способе "общения" между потоками.
...
Рейтинг: 0 / 0
Есть ли в windows ограничение проц.времени на приложение ?
    #38101461
parb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
доигрался до такого... код ( попытка загрузить проц, расчётом простое ли число 99999 ) :

Код: pascal
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.
        sequence := 1; 
        while needData do begin
                primeNumber := 99999;

                for i2 := 2 to primeNumber do
                begin                    
                    somethingToString(-2, res); // tut chto-to ne ponjatnoe
                    if (primeNumber mod i2) = 0 then
                    begin
                        mockData := 3;
                    end;
                end;


                if ( sequence = 100) then begin

                    Synchronize(
                      procedure
                      begin
                          SyncronizeValue( mockData );
                      end
                    );
                    sequence := 0;

                end;
                inc(sequence);
        end;




Код: pascal
1.
2.
3.
4.
5.
6.
7.
procedure somethingToString( id : integer; var res : string );
begin

   //res := 'test';
   groupid := Random(32) + Random(18);

end;




код в виде представленном выше, успешно загружает 8 ядер и соответственно даёт 100% нагрузку.

Но стоит в процедуре somethingToString убрать комментарий со строки
Код: sql
1.
res := 'test';

и появляется проблема. Загрузка не растёт выше 15%, а увеличение количества потоков не сказывается на загруженности и количестве обработанных данных ( количество вызовов SyncronizeValue( mockData ); в единицу времени)

что я делаю не так ?

P.S. проблему в работе со строками я начал искать после того как наткнулся на фразу :
Rather use var parameters in a procedure instead of a function returning a string (a function returning a string will add an UStrAsg/LStrAsg call which has a LOCK which will flush all CPU cores);

но получить такой результат я уж точно не планировал :(
...
Рейтинг: 0 / 0
Есть ли в windows ограничение проц.времени на приложение ?
    #38103074
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
parbНо стоит в процедуре somethingToString убрать комментарий со строки
Это связано с тем, что string и к тому-же объявлена как var.

http://stackoverflow.com/questions/7725813/what-is-new-in-multithreading-in-delphi-xe
...
Рейтинг: 0 / 0
Есть ли в windows ограничение проц.времени на приложение ?
    #38103084
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
parb,

Точно НЕ вариант Б, однозначно.
...
Рейтинг: 0 / 0
Есть ли в windows ограничение проц.времени на приложение ?
    #38104196
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
parb, мне кажется ты неверно акцентируешь цель. Ведь загрузить на 100% процессор
всегда можно. Дурное дело не хитрое. Но как у тебя получается что "мастер поток"
является тормозом по отношению к "рабочим потокам" ? Тут какое-то неверное
проектирование. Вобщем без исходника и юзкейса вообще нифига непонятно.

В примере с расчётом primes нужно считать от 3 с шагом 2. Делене на 2
расчитать вручную вне второго цикла. И это еще не все оптимизации.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Есть ли в windows ограничение проц.времени на приложение ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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