Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi 7 на многопроцессорном компьютере / 25 сообщений из 70, страница 1 из 3
24.05.2021, 15:42
    #40072480
BorodaOleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
Доброго дня!

Имеется ли какая-либо возможность заставить многопоточное приложение, компилированное на Delphi 7 заставить работать на многопроцессорном компьютере, так, что-бы процессы работали на других ядрах, отличных от основного потока? Всего потоков - штук 60, реально работают 12 - 15. На картинке видно - загружается только 1 процессор, остальные еле-еле шевелятся. В главном окне мышь реагирует через 10-15 секунд :(
...
Рейтинг: 0 / 0
24.05.2021, 15:52
    #40072485
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
24.05.2021 15:42, BorodaOleg пишет:
> Имеется ли какая-либо возможность заставить многопоточное приложение, компилированное на Delphi 7 заставить работать на многопроцессорном компьютере, так, что-бы процессы работали на других ядрах, отличных от основного потока? Всего потоков - штук 60, реально работают 12 - 15. На картинке видно - загружается только 1 процессор, остальные еле-еле шевелятся. В главном окне мышь реагирует через 10-15 секунд :(

Этим занимается планировщик Винды.
Если есть непреодолимое желание ему помешать, играйся с SetThreadAffinityMask()
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.05.2021, 15:53
    #40072486
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
BorodaOleg,

Открой для себя потоки и TThread.
...
Рейтинг: 0 / 0
24.05.2021, 15:57
    #40072489
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
BorodaOleg> Имеется ли какая-либо возможность заставить
BorodaOleg> многопоточное приложение ... работать на
BorodaOleg> многопроцессорном компьютере, так, что-бы
BorodaOleg> процессы работали на других ядрах, отличных от основного потока?


Заставлять обычно нет нужды, планировщик
ОС сам знает какой поток когда и куда кинуть.

См. в коде, есть ли привязка к процессору
(ну и может у тебя реально вся работа в
основном потоке делается, а остальные ждут).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.05.2021, 16:08
    #40072494
DmSer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
Если в одном приложении куча потоков, которые занимаются вычислениями, то лучше поставить им приоритет Lower, тогда главный поток программы не будет подвисать. При этом приоритет Lower никак не будет мешать ходу вычислений (при таком количестве ядер).

И желательно до минимума сократить работу с динамическими массивами, строками, как можно реже создавать/уничтожать объекты, вызывать GetMem, FreeMem.

Или подключить многопоточный менеджер памяти, например tcMalloc (не знаю, как он прицепится к Delphi 7).
...
Рейтинг: 0 / 0
24.05.2021, 16:12
    #40072498
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
BorodaOleg,

Ищи Synchronize, Люк!
...
Рейтинг: 0 / 0
24.05.2021, 16:15
    #40072499
Valery_B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
BorodaOleg

заставить работать на многопроцессорном компьютере, так, что-бы процессы работали на других ядрах

Нельзя.
Это делает операционная система.
В теории, можно спуститься на более низкий уровень, но это не правильный путь.

BorodaOleg

Всего потоков - штук 60, реально работают 12 - 15. На картинке видно - загружается только 1 процессор

Значит они реально не работают и написаны очень плохо.
Напиши лабу с TStuppidThread и создай 10 потоков.
Код: pascal
1.
2.
3.
4.
procedure TStuppidThread.Execute;
begin
  while not Terminated do;
end;
...
Рейтинг: 0 / 0
24.05.2021, 16:26
    #40072502
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
Valery_B
Значит они реально не работают и написаны очень плохо.

Ну я так и сказал, что человеку надо открыть для себя потоки. ;)

Скриншот таск мэнеджера об этом говорит вполне очевидно.
...
Рейтинг: 0 / 0
24.05.2021, 16:38
    #40072506
BorodaOleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
Юмористы, млин :)

Synchronize нет, все делается через CriticalSection, TThreadList, Semaphore и пр.

В потоках - коннект с COM/GSM/GPRS соединениями, несложная обработка (расшифровка HEX последовательностей от 15 до 1000 байт) и запись в БД firebird.
Отдельным потоком лог - тут понятно, жрет не мелко.

Если бы винда нормально распределила было бы как минимум 3 потока с "запредельными" нагрузками - Основной поток, лог и FB - сейчас только один и загружен по шею.
...
Рейтинг: 0 / 0
24.05.2021, 16:46
    #40072509
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
BorodaOleg

В потоках - коннект с COM/GSM/GPRS соединениями, несложная обработка (расшифровка HEX последовательностей от 15 до 1000 байт) и запись в БД firebird.
Отдельным потоком лог - тут понятно, жрет не мелко.

А чему тут жрать-то? Если загрузки нет, ищи блокировки главного потока
...
Рейтинг: 0 / 0
24.05.2021, 16:46
    #40072510
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
24.05.2021 16:38, BorodaOleg пишет:
> и запись в БД firebird.

какой коннект?
какой протокол?
сколько коннектов у процесса?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.05.2021, 16:46
    #40072511
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
BorodaOleg,

Проблема не в винде а в твоем коде.
...
Рейтинг: 0 / 0
24.05.2021, 16:50
    #40072514
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
BorodaOleg
Если бы винда нормально распределила
Некорректное высказывание. Корректное "Если бы программа была написана правильно"
BorodaOleg
сейчас только один и загружен по шею.
Значит остальные потоки его ждут. И судя по
BorodaOleg
В главном окне мышь реагирует через 10-15 секунд :(
ищите таки Synchronize. У вас главный поток чем-то сильно загружен
...
Рейтинг: 0 / 0
24.05.2021, 16:52
    #40072515
DmSer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
При создании каждого потока пишите в лог ThreadId и название класса объекта-потока. Потом откройте ProcessExplorer, откройте для Вашего процесса список потоков и смотрите на загрузку. По ID потока сможете определить, что это за поток и отдельно исследовать, почему он так грузит процессор.
...
Рейтинг: 0 / 0
24.05.2021, 16:56
    #40072517
DmSer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
авторОтдельным потоком лог - тут понятно, жрет не мелко.

Нужно обязательно буферизовать данные перед записью в лог-файл. Т.е. не писать в лог-файл каждую строку отдельно, а сначала соединить все строки, которые требуется записать, и сохранить их в лог одним действием.
У меня в программе очень большой объем записи в лог, но я не могу сказать, что в этом месте есть какая-то проблема с производительностью.
...
Рейтинг: 0 / 0
24.05.2021, 17:12
    #40072523
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
Битва экстрасенсов, мля...
...
Рейтинг: 0 / 0
24.05.2021, 17:13
    #40072524
BorodaOleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
DmSer,

Спасибо за совет. ThreadId и ThreadHandle собираю в TList уже давно, не думал что они совпадают c системными.
А с логом точно что-то делать нужно, и да, пишется он по 1 строчке
...
Рейтинг: 0 / 0
24.05.2021, 17:16
    #40072527
DmSer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
ThreadId - глобальный,
ThreadHandle - у каждого процесса независимая нумерация хэндлов.
...
Рейтинг: 0 / 0
24.05.2021, 17:17
    #40072528
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
BorodaOleg
Если бы винда нормально распределила было бы как минимум 3 потока с "запредельными" нагрузками - Основной поток, лог и FB - сейчас только один и загружен по шею.
Ну, чтож.. Переустанови винду, раз она плохо потоки менеджерит. Я бы так и сделал, будь у меня такие проблемы!
...
Рейтинг: 0 / 0
24.05.2021, 17:24
    #40072530
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
YuRock
BorodaOleg
Если бы винда нормально распределила было бы как минимум 3 потока с "запредельными" нагрузками - Основной поток, лог и FB - сейчас только один и загружен по шею.
Ну, чтож.. Переустанови винду, раз она плохо потоки менеджерит. Я бы так и сделал, будь у меня такие проблемы!


Попахивает "вредными советами" от Остера :)
...
Рейтинг: 0 / 0
24.05.2021, 17:39
    #40072535
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
DarkMaster
YuRock
пропущено...
Ну, чтож.. Переустанови винду, раз она плохо потоки менеджерит. Я бы так и сделал, будь у меня такие проблемы!

Попахивает "вредными советами" от Остера :)
Какие утверждения/предположения - такие и советы :)
...
Рейтинг: 0 / 0
24.05.2021, 17:53
    #40072541
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
YuRock
Ну, чтож.. Переустанови винду, раз она плохо потоки менеджерит. Я бы так и сделал, будь у меня такие проблемы!
Может быть конфликт винды и железа.
Надо еще железо новое купить.

Обязательно с NVidia RTX 3090, а то без рей-трейсинга многопоточность будет не полной.
...
Рейтинг: 0 / 0
24.05.2021, 17:54
    #40072542
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
24.05.2021 17:53, rgreat пишет:
>
> Обязательно с NVidia RTX 3090, а то без рей-трейсинга многопоточность будет не полной.

кстати, да!
поддерживаю.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.05.2021, 18:08
    #40072545
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
BorodaOleg,

Если нет Synchronize, то надо выяснить на чем тормозит главный поток: жми паузу (Run\Program Pause) и изучай стек главного и прочих потоков (View\Debug Windows\Threads)

и возможно там увидешь скрытый Synchronize! от какого нить комопнента с свойством RunEventInMainThread
...
Рейтинг: 0 / 0
24.05.2021, 18:32
    #40072552
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi 7 на многопроцессорном компьютере
Мимопроходящий

24.05.2021 17:53, rgreat пишет:
>
> Обязательно с NVidia RTX 3090, а то без рей-трейсинга многопоточность будет не полной.

кстати, да!
поддерживаю.


Эх... Жаль у него D7, а не Лазарь + Дельфя :( Советов бы было больше......
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi 7 на многопроцессорном компьютере / 25 сообщений из 70, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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