Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3      [все]
 Delphi 7 на многопроцессорном компьютере  [new]
BorodaOleg
Member

Откуда:
Сообщений: 74
Доброго дня!

Имеется ли какая-либо возможность заставить многопоточное приложение, компилированное на Delphi 7 заставить работать на многопроцессорном компьютере, так, что-бы процессы работали на других ядрах, отличных от основного потока? Всего потоков - штук 60, реально работают 12 - 15. На картинке видно - загружается только 1 процессор, остальные еле-еле шевелятся. В главном окне мышь реагирует через 10-15 секунд :(

К сообщению приложен файл. Размер - 110Kb
24 май 21, 15:42    [22326297]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32405

24.05.2021 15:42, BorodaOleg пишет:
> Имеется ли какая-либо возможность заставить многопоточное приложение, компилированное на Delphi 7 заставить работать на многопроцессорном компьютере, так, что-бы процессы работали на других ядрах, отличных от основного потока? Всего потоков - штук 60, реально работают 12 - 15. На картинке видно - загружается только 1 процессор, остальные еле-еле шевелятся. В главном окне мышь реагирует через 10-15 секунд :(

Этим занимается планировщик Винды.
Если есть непреодолимое желание ему помешать, играйся с SetThreadAffinityMask()

Posted via ActualForum NNTP Server 1.5

24 май 21, 15:52    [22326306]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
rgreat
Member

Откуда:
Сообщений: 6711
BorodaOleg,

Открой для себя потоки и TThread.
24 май 21, 15:53    [22326309]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
BorodaOleg> Имеется ли какая-либо возможность заставить
BorodaOleg> многопоточное приложение ... работать на
BorodaOleg> многопроцессорном компьютере, так, что-бы
BorodaOleg> процессы работали на других ядрах, отличных от основного потока?


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

См. в коде, есть ли привязка к процессору
(ну и может у тебя реально вся работа в
основном потоке делается, а остальные ждут).

Posted via ActualForum NNTP Server 1.5

24 май 21, 15:57    [22326312]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1376
Если в одном приложении куча потоков, которые занимаются вычислениями, то лучше поставить им приоритет Lower, тогда главный поток программы не будет подвисать. При этом приоритет Lower никак не будет мешать ходу вычислений (при таком количестве ядер).

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

Или подключить многопоточный менеджер памяти, например tcMalloc (не знаю, как он прицепится к Delphi 7).

Сообщение было отредактировано: 24 май 21, 16:02
24 май 21, 16:08    [22326324]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1552
BorodaOleg,

Ищи Synchronize, Люк!
24 май 21, 16:12    [22326330]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Valery_B
Member

Откуда: Москва
Сообщений: 2046
BorodaOleg

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

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

BorodaOleg

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

Значит они реально не работают и написаны очень плохо.
Напиши лабу с TStuppidThread и создай 10 потоков.
procedure TStuppidThread.Execute;
begin
  while not Terminated do;
end;
24 май 21, 16:15    [22326332]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
rgreat
Member

Откуда:
Сообщений: 6711
Valery_B
Значит они реально не работают и написаны очень плохо.

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

Скриншот таск мэнеджера об этом говорит вполне очевидно.

Сообщение было отредактировано: 24 май 21, 16:18
24 май 21, 16:26    [22326342]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
BorodaOleg
Member

Откуда:
Сообщений: 74
Юмористы, млин :)

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

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

Если бы винда нормально распределила было бы как минимум 3 потока с "запредельными" нагрузками - Основной поток, лог и FB - сейчас только один и загружен по шею.
24 май 21, 16:38    [22326350]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 755
BorodaOleg

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

А чему тут жрать-то? Если загрузки нет, ищи блокировки главного потока

Сообщение было отредактировано: 24 май 21, 16:37
24 май 21, 16:46    [22326354]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32405

24.05.2021 16:38, BorodaOleg пишет:
> и запись в БД firebird.

какой коннект?
какой протокол?
сколько коннектов у процесса?

Posted via ActualForum NNTP Server 1.5

24 май 21, 16:46    [22326355]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
rgreat
Member

Откуда:
Сообщений: 6711
BorodaOleg,

Проблема не в винде а в твоем коде.
24 май 21, 16:46    [22326356]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 12901
BorodaOleg
Если бы винда нормально распределила
Некорректное высказывание. Корректное "Если бы программа была написана правильно"
BorodaOleg
сейчас только один и загружен по шею.
Значит остальные потоки его ждут. И судя по
BorodaOleg
В главном окне мышь реагирует через 10-15 секунд :(
ищите таки Synchronize. У вас главный поток чем-то сильно загружен
24 май 21, 16:50    [22326359]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1376
При создании каждого потока пишите в лог ThreadId и название класса объекта-потока. Потом откройте ProcessExplorer, откройте для Вашего процесса список потоков и смотрите на загрузку. По ID потока сможете определить, что это за поток и отдельно исследовать, почему он так грузит процессор.
24 май 21, 16:52    [22326360]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1376
автор
Отдельным потоком лог - тут понятно, жрет не мелко.


Нужно обязательно буферизовать данные перед записью в лог-файл. Т.е. не писать в лог-файл каждую строку отдельно, а сначала соединить все строки, которые требуется записать, и сохранить их в лог одним действием.
У меня в программе очень большой объем записи в лог, но я не могу сказать, что в этом месте есть какая-то проблема с производительностью.
24 май 21, 16:56    [22326362]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2572
Битва экстрасенсов, мля...
24 май 21, 17:12    [22326375]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
BorodaOleg
Member

Откуда:
Сообщений: 74
DmSer,

Спасибо за совет. ThreadId и ThreadHandle собираю в TList уже давно, не думал что они совпадают c системными.
А с логом точно что-то делать нужно, и да, пишется он по 1 строчке
24 май 21, 17:13    [22326376]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1376
ThreadId - глобальный,
ThreadHandle - у каждого процесса независимая нумерация хэндлов.
24 май 21, 17:16    [22326381]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
BorodaOleg
Если бы винда нормально распределила было бы как минимум 3 потока с "запредельными" нагрузками - Основной поток, лог и FB - сейчас только один и загружен по шею.
Ну, чтож.. Переустанови винду, раз она плохо потоки менеджерит. Я бы так и сделал, будь у меня такие проблемы!
24 май 21, 17:17    [22326382]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6505
YuRock
BorodaOleg
Если бы винда нормально распределила было бы как минимум 3 потока с "запредельными" нагрузками - Основной поток, лог и FB - сейчас только один и загружен по шею.
Ну, чтож.. Переустанови винду, раз она плохо потоки менеджерит. Я бы так и сделал, будь у меня такие проблемы!


Попахивает "вредными советами" от Остера :)
24 май 21, 17:24    [22326385]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
DarkMaster
YuRock
пропущено...
Ну, чтож.. Переустанови винду, раз она плохо потоки менеджерит. Я бы так и сделал, будь у меня такие проблемы!

Попахивает "вредными советами" от Остера :)
Какие утверждения/предположения - такие и советы :)
24 май 21, 17:39    [22326393]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
rgreat
Member

Откуда:
Сообщений: 6711
YuRock
Ну, чтож.. Переустанови винду, раз она плохо потоки менеджерит. Я бы так и сделал, будь у меня такие проблемы!
Может быть конфликт винды и железа.
Надо еще железо новое купить.

Обязательно с NVidia RTX 3090, а то без рей-трейсинга многопоточность будет не полной.
24 май 21, 17:53    [22326408]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32405

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

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

Posted via ActualForum NNTP Server 1.5

24 май 21, 17:54    [22326409]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1552
BorodaOleg,

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

и возможно там увидешь скрытый Synchronize! от какого нить комопнента с свойством RunEventInMainThread

Сообщение было отредактировано: 24 май 21, 18:00
24 май 21, 18:08    [22326415]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6505
Мимопроходящий

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

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


Эх... Жаль у него D7, а не Лазарь + Дельфя :( Советов бы было больше......
24 май 21, 18:32    [22326428]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
DarkMaster> Советов бы было больше......

Посоветовали бы клавиатуру поменять и монитор протереть?

Posted via ActualForum NNTP Server 1.5

24 май 21, 22:20    [22326505]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
rgreat
Member

Откуда:
Сообщений: 6711
Приходит к Горбачёву министр сельского хозяйства и говорит:
- Михаил Сергеевич, у нас проблема. По всей стране пошёл куринный мор.
Все куры дохнут. Что нам делать?
- Повесте в каждом курятнике зелёный круг.

Сделали. Приходит тот же министр через несколько дней и говорит:
- Михаил Сергеевич, всё равно куры продолжают дохнуть. Что нам делать?
- Добавте в зелёный круг красный квадрат.

Сделали. Опят приходит министр через несколько дней и говорит:
- Не помогает, куры как дохли, так и дохнут. Что делать?
- Раскрасте красный квадрат в белый горошек.

Сделали и это. Приходит министр ещё через несколько дней и говорит:
- Михаил Сергеевич, всё! Все куры в стране сдохли.
- Жаль. А у меня ещё столько новых идей осталось.
24 май 21, 22:49    [22326509]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
mayton
Member

Откуда: loopback
Сообщений: 51434
Если приложение написано так, что потоки используют какой-то порт или прерывание то
разнос их по отдельным ядрам или threads ничего не даст.
24 май 21, 22:59    [22326510]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
bk0010
Member

Откуда:
Сообщений: 5081
rgreat
Обязательно с NVidia RTX 3090, а то без рей-трейсинга многопоточность будет не полной.
В свое время говорили, что без Voodoo баланс у бухов хуже сходится.
24 май 21, 23:07    [22326511]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Vizit0r
Member

Откуда: Одесса
Сообщений: 874
DarkMaster

Эх... Жаль у него D7, а не Лазарь + Дельфя :( Советов бы было больше......


да и так тут филиал гадальной комнаты неплохо работает.

А ТС молодец, стойко держится, ни строчки секретного кода не показалю
25 май 21, 00:30    [22326519]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
Vizit0r
А ТС молодец, стойко держится, ни строчки секретного кода не показал
Да, достойно борется.
25 май 21, 00:32    [22326521]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
BorodaOleg
Member

Откуда:
Сообщений: 74
YuRock,

Я бы показал, да в проекте ~ 1000000 строк :)
25 май 21, 10:54    [22326621]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 27106
BorodaOleg
Я бы показал, да в проекте ~ 1000000 строк :)

И все они выполняются в разных потоках?
25 май 21, 10:58    [22326624]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
BorodaOleg
Member

Откуда:
Сообщений: 74
Вообщем всё, вопрос закрыт.
Проблема оказалась в логах - они находятся (как оказалось) в главном потоке.
В лог летит порядка 50-100 строк в секунду, все это построчно пишется на диск и это всё еще отображается в Memo, причем аж в 2 штуки. Я в шоке.
25 май 21, 11:00    [22326628]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
BorodaOleg
Member

Откуда:
Сообщений: 74
wadman
BorodaOleg
Я бы показал, да в проекте ~ 1000000 строк :)

И все они выполняются в разных потоках?


Не понял...
25 май 21, 11:01    [22326630]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 27106
У "взрослых" лог ведется в отдельным потоке и затраты на него - лишь на отправку сообщения, либо помещение сообщения в свою очередь.
25 май 21, 11:02    [22326631]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32405

25.05.2021 11:02, wadman пишет:
> У "взрослых" лог ведется в отдельным потоке и затраты на него - лишь на отправку сообщения, либо помещение сообщения в свою очередь.

ты чо! оно же потеряется!!! (С)

зы: реально встречал такую аргументацию

Posted via ActualForum NNTP Server 1.5

25 май 21, 11:15    [22326644]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
mayton
Member

Откуда: loopback
Сообщений: 51434
BorodaOleg
Вообщем всё, вопрос закрыт.
Проблема оказалась в логах - они находятся (как оказалось) в главном потоке.
В лог летит порядка 50-100 строк в секунду, все это построчно пишется на диск и это всё еще отображается в Memo, причем аж в 2 штуки. Я в шоке.

Лог в одном потоке - это не проблема. Проблема в том что он не буферизируется. И на каждые 100 строк в секунду
формируется блокирование файловой системой (возможно это ожидание sync())

Сделай буферизацию и всё будет очень быстро. В идеале должно быть 2 потока. 1 - ресивер событий. 2 - врайтер в дисковую систему.
Между ними - кольцевой буфер.
25 май 21, 11:25    [22326652]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32405

25.05.2021 11:25, mayton пишет:
> В идеале должно быть 2 потока. 1 - ресивер событий. 2 - врайтер в дисковую систему.
> Между ними - кольцевой буфер.

папа, а ты сейчас с кем разговаривал? (С)

Posted via ActualForum NNTP Server 1.5

25 май 21, 11:27    [22326655]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
mayton
Member

Откуда: loopback
Сообщений: 51434
Или использовать готовый буферизированный fileWriter если такой есть в Delphi.
25 май 21, 11:29    [22326658]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 12901
DmSer
Нужно обязательно буферизовать данные перед записью в лог-файл. Т.е. не писать в лог-файл каждую строку отдельно, а сначала соединить все строки, которые требуется записать, и сохранить их в лог одним действием.
Совет так себе. Можно потерять часть лога при падении программы. У меня логгер пишет сразу, но живет в отдельном потоке. Правда хендл файла я открываю только один раз, а не на каждую запись. Так что ОС может что-то буферизировать сама

Сообщение было отредактировано: 25 май 21, 11:37
25 май 21, 11:42    [22326673]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
mayton
Member

Откуда: loopback
Сообщений: 51434
В борьбе за перформанс должен быть какой-то компромисс. Возможно лучше потерять пару десятков TRACE-событий
чем иметь просто тормознутое приложение.

Кстати что в логах? Насколько оно важно?
25 май 21, 11:50    [22326679]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1376
_Vasilisk_
DmSer
Нужно обязательно буферизовать данные перед записью в лог-файл. Т.е. не писать в лог-файл каждую строку отдельно, а сначала соединить все строки, которые требуется записать, и сохранить их в лог одним действием.
Совет так себе. Можно потерять часть лога при падении программы


Глупости! При построчной записи вероятность потерять часть лога при падении программы на порядки выше, чем при записи подготовленного буфера. Сейчас очень популярны безкэшевые SSD-шники. На них запись выполняется ооочень долго. Если писать по одной строчке, то эти строчки будут копиться в ОЗУ гораздо быстрее, чем они будут записываться в лог-файл. И точно часть данных потеряется при падении программы!
25 май 21, 11:54    [22326682]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 27106
mayton
Лог в одном потоке - это не проблема. Проблема в том что он не буферизируется. И на каждые 100 строк в секунду
формируется блокирование файловой системой (возможно это ожидание sync())

Ничего себе!

Не знаю, не сталкивался. А у меня в лог бывает и поболее потоков пишет и куда больше строчек.
25 май 21, 11:54    [22326683]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1376
Посмотрите как реализован простейший логгер (с комментариями)
https://github.com/loginov-dmitry/multithread/blob/master/multithread_in_delphi_for_beginners.md#sync_obj_event_logger
там нет ничего лишнего. Кто угодно может адаптировать под себя.
25 май 21, 12:12    [22326692]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
wadman
mayton
Лог в одном потоке - это не проблема. Проблема в том что он не буферизируется. И на каждые 100 строк в секунду
формируется блокирование файловой системой (возможно это ожидание sync())

Ничего себе!

Не знаю, не сталкивался. А у меня в лог бывает и поболее потоков пишет и куда больше строчек.
Зависит от винта. У меня неоднократно бывало, что логи не успевали писаться
И всё заканчивалось переполнением очереди и/или OOM.
Помогла буфферизация и сброс в файл по таймауту (каждые 10 миллисекунд пишется то, что накопилось). Да, с таким подходом может что-то потеряться теоретически, да ну и хрен с ним.
25 май 21, 12:15    [22326694]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
BorodaOleg
Member

Откуда:
Сообщений: 74
wadman,

Вот и я сейчас так делаю
Дело в том, что проект не мой, я его дорабатываю
25 май 21, 12:21    [22326703]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
BorodaOleg
Member

Откуда:
Сообщений: 74
mayton
В борьбе за перформанс должен быть какой-то компромисс. Возможно лучше потерять пару десятков TRACE-событий
чем иметь просто тормознутое приложение.

Кстати что в логах? Насколько оно важно?


"-Выходи в окно
- Э, дарагой так 3-й этаж
- Хочешь интернет - выходи
- Э, дарагой мне настолько интернет не нужен"

Процесс опроса электросчётчиков - если часть лога "рухнет", не страшно
25 май 21, 12:26    [22326708]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
BorodaOleg
Member

Откуда:
Сообщений: 74
DmSer
Посмотрите как реализован простейший логгер (с комментариями)
https://github.com/loginov-dmitry/multithread/blob/master/multithread_in_delphi_for_beginners.md#sync_obj_event_logger
там нет ничего лишнего. Кто угодно может адаптировать под себя.


Спасибо, как-раз собирался спросить общество как лучше буферизировать
25 май 21, 12:29    [22326711]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32405

25.05.2021 11:42, _Vasilisk_ пишет:
> Так что ОС может что-то буферизировать сама

при желании можно поиграться с FILE_FLAG_WRITE_THROUGH и FILE_FLAG_NO_BUFFERING

Posted via ActualForum NNTP Server 1.5

25 май 21, 12:52    [22326733]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
mayton
Member

Откуда: loopback
Сообщений: 51434
BorodaOleg
mayton
В борьбе за перформанс должен быть какой-то компромисс. Возможно лучше потерять пару десятков TRACE-событий
чем иметь просто тормознутое приложение.

Кстати что в логах? Насколько оно важно?


"-Выходи в окно
- Э, дарагой так 3-й этаж
- Хочешь интернет - выходи
- Э, дарагой мне настолько интернет не нужен"

Процесс опроса электросчётчиков - если часть лога "рухнет", не страшно

Пишет в 1 файл или в несколько?
25 май 21, 13:03    [22326740]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
Товарищи, возвращаемся от обсуждения Delphi7 и личностей участников к обсуждению сабжа.

Спасибо.
25 май 21, 15:26    [22326866]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
BorodaOleg
Member

Откуда:
Сообщений: 74
mayton
BorodaOleg
пропущено...


"-Выходи в окно
- Э, дарагой так 3-й этаж
- Хочешь интернет - выходи
- Э, дарагой мне настолько интернет не нужен"

Процесс опроса электросчётчиков - если часть лога "рухнет", не страшно

Пишет в 1 файл или в несколько?


В 1 файл.
25 май 21, 17:01    [22326940]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32405

25.05.2021 17:01, BorodaOleg пишет:
> В 1 файл.

при помощи чего обеспечивается сериализация?

Posted via ActualForum NNTP Server 1.5

25 май 21, 17:04    [22326942]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
mayton
Member

Откуда: loopback
Сообщений: 51434
BorodaOleg
mayton
пропущено...

Пишет в 1 файл или в несколько?


В 1 файл.

А записи - текстовые или двоичные?
25 май 21, 18:19    [22326994]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Cobalt747
Member

Откуда:
Сообщений: 2318
BorodaOleg
и это всё еще отображается в Memo, причем аж в 2 штуки.

Вот тут-то и была ВСЯ засада )))
25 май 21, 20:42    [22327083]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 27106
Cobalt747
BorodaOleg
и это всё еще отображается в Memo, причем аж в 2 штуки.

Вот тут-то и была ВСЯ засада )))

Хоть в десять. Я логгер писал в расчете на каждый девайс один мемо и на все девайсы один файл.
Ну нет проблем. Целероны 10-летней давности справлялись с 24, 48 и более девайсами, для которым плюс минус 100 мс критично для закрытия сессии.
25 май 21, 22:33    [22327133]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Vizit0r
Member

Откуда: Одесса
Сообщений: 874
wadman
Cobalt747
пропущено...

Вот тут-то и была ВСЯ засада )))

Хоть в десять. Я логгер писал в расчете на каждый девайс один мемо и на все девайсы один файл.
Ну нет проблем. Целероны 10-летней давности справлялись с 24, 48 и более девайсами, для которым плюс минус 100 мс критично для закрытия сессии.


формируешь сообщения в пул, потом его по таймеру закидываешь в мемо?
26 май 21, 02:08    [22327181]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
BorodaOleg
Member

Откуда:
Сообщений: 74
mayton
BorodaOleg
пропущено...


В 1 файл.

А записи - текстовые или двоичные?


Текстовые
26 май 21, 08:34    [22327216]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
BorodaOleg
Member

Откуда:
Сообщений: 74
Cobalt747
BorodaOleg
и это всё еще отображается в Memo, причем аж в 2 штуки.

Вот тут-то и была ВСЯ засада )))


Не вся, после того как одно мемо прибил - тормоза остались. Не такие, конечно, но есть
26 май 21, 08:35    [22327217]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
mayton
Member

Откуда: loopback
Сообщений: 51434
Мне кажется тема данного топика неразрывно связана с конфигурацией железа и ОС того сервера где работает
приложение по сбору сведений со счетчиков.

Если мы исчерпали возможности софта - (сорян я не спец в Delphi и не знаю какие компоненты делают
буферизированный вывод и где политики sync, через время или через переполнение буфера - хз)
- то предлагаю посмотреть на дисковую подсистему в части свойств дисков.

Вот как тут пишут https://winaero.com/disk-write-caching-windows-10/
и для соответсвующей версии сервера (может там 2003-2008).
26 май 21, 09:56    [22327257]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 27106
Vizit0r
wadman
пропущено...

Хоть в десять. Я логгер писал в расчете на каждый девайс один мемо и на все девайсы один файл.
Ну нет проблем. Целероны 10-летней давности справлялись с 24, 48 и более девайсами, для которым плюс минус 100 мс критично для закрытия сессии.


формируешь сообщения в пул, потом его по таймеру закидываешь в мемо?

Очередью занимается ОС. Сообщения можно слать окнам и потокам без какой-либо блокировки и синхронизации.
26 май 21, 10:18    [22327276]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
LuciferNovoros
Member

Откуда: Новороссийск
Сообщений: 86
BorodaOleg
Не вся, после того как одно мемо прибил - тормоза остались. Не такие, конечно, но есть


Можно попробовать завернуть запись в мемо в конструкцию типа
Memo1.Lines.BeginUpdate;
// Что-то тут синхронизируем с мемо
Memo1.Lines.EndUpdate;

А еще лучше его вообще выкинуть. Очень оно тормозное, особенно на больших объемах данных. Как еще один вариант - просто ограничить число выводимых в мемо строк.
26 май 21, 10:19    [22327279]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1376
А вообще, нужны ли эти строки в Мемо? Кому они там потребовались?
26 май 21, 11:22    [22327319]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32405

26.05.2021 11:22, DmSer пишет:
> А вообще, нужны ли эти строки в Мемо? Кому они там потребовались?

а чтоб видно было, что программа РАБОТАЕТ!

Posted via ActualForum NNTP Server 1.5

26 май 21, 11:29    [22327323]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2572
BorodaOleg
Cobalt747
пропущено...

Вот тут-то и была ВСЯ засада )))


Не вся, после того как одно мемо прибил - тормоза остались. Не такие, конечно, но есть
Прибей второе и проверь.
26 май 21, 12:26    [22327366]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
BorodaOleg
Member

Откуда:
Сообщений: 74
Перенес запись лога в поток. Скорости заметно прибавило.
Сделал возможность закрывать Memo, при его закрытии программа начинает работать почти как нужно, чуть-чуть подтормаживает.
Но сообщения нужны, они и адресацию, и ошибки выводят, чтобы пользователь ориентироваться мог. Можно, разве что, попытаться уменьшить их количество при выводе на экран, только писать в файл.
26 май 21, 13:12    [22327409]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
rgreat
Member

Откуда:
Сообщений: 6711
BorodaOleg
чуть-чуть подтормаживает.
А не должна.
26 май 21, 13:15    [22327414]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53472

BorodaOleg
Сделал возможность закрывать Memo

Memo - крайне неудачный компонент для лога. Используй ListBox в виртуальном режиме.

Posted via ActualForum NNTP Server 1.5

26 май 21, 13:28    [22327418]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2572
Dimitry Sibiryakov
BorodaOleg
Сделал возможность закрывать Memo

Memo - крайне неудачный компонент для лога. Используй ListBox в виртуальном режиме.
+1
26 май 21, 14:10    [22327471]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3      [все]
Все форумы / Delphi Ответить