powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Многопоточное программирование в Delphi для начинающих
25 сообщений из 160, страница 5 из 7
Многопоточное программирование в Delphi для начинающих
    #39987327
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
теперь хром плодит свои копии интенсивней, чем зерглинги вылупляются!

146%!
И на старых машинах иногда завешивает проц вусмерть.

roschinspb
Прогрессбар можно перерисовать и repaint-ом

если только в таймере. Интересно, сколько таймеров можно запустить без заметного вреда для софтины?
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39987333
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне кажется эта статья описывает многопоточность достаточно хорошо, многое оттуда взять можно https://forum.vingrad.ru/topic-60076.html
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39987371
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb
мне кажется эта статья описывает многопоточность достаточно хорошо, многое оттуда взять можно https://forum.vingrad.ru/topic-60076.html


Да, я с нею знакомился. Она не для начинающих. Писалась в те времена, когда программирование было уделом гениев. Очень тяжело усваивается. Думаю, мало кто осилит дочитать более 30% (до БАБ врядли дело дойдет :)
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39987639
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius
...
пришлось так делать когда использовал bass что бы писать интернет радио...
Если не секрет, какой протокол от сервера к клиенту? Какой-нибудь HLS или Icecast?
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39987877
Фотография roschinspb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док
. Интересно, сколько таймеров можно запустить без заметного вреда для софтины?
много. В fix чуть менее чем у всех контролов есть анимация, а она содержит таймер.
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39987893
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавлен раздел планирование потоков
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39987959
ART-CODE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39987962
ART-CODE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spinlock
https://ru.wikipedia.org/wiki/Спин-блокировка

I/O Completion Ports
https://docs.microsoft.com/en-us/windows/win32/fileio/i-o-completion-ports
------
Не всем, и не всегда нужна кроссплатформенность.
Бывает, что важнее выжать по-максимуму из возможностей ОС и процессора.
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39987979
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62,

Использовал чтото высокоуровневое, просто урл передавал, под капот потока не смотрел
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39989478
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,
зы. на скруле всегда так, как только тема исчерпывается, начинается оффтоп

Рано! Кучу материалов изучаю по многопоточности. Что-нибудь получится! :)
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39989804
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
cptngrb
мне кажется эта статья описывает многопоточность достаточно хорошо, многое оттуда взять можно https://forum.vingrad.ru/topic-60076.html


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

На мой взгляд неплохо или просто хорошо :) написано у Пачеко и Тексейры https://www.for-stydents.ru/informatika/delphi/uchebniki/delphi-5-rukovodstvo-razrabotchika-tom-1-osnovnye-metody-i-tehnologii-programmirovaniya.html Хотя книжка старая, 2000 года.
Глава 11 "Создание многопоточных приложений". По-моему довольно простое, понятное изложение, при этом затронуты разные темы, в том числе многопоточный доступ к БД, графика.
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39990039
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переработан раздел Планирование потоков

Пришлось убрать раздел "Роль кэшей процессора", т.к. выяснилось, что кэши процессора практически не играют никакой роли в планировании потоков и переключении контекста, а парить читателю мозги лишней информацией я не хочу.
Кто в теме разбирается, посмотрите на предмет того, чтобы не было дезинформации.
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39990047
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,

warning Внимание! Согласно официальной документации, в секции threadvar нельзя объявлять переменные некоторых типов, в том числе: Pointer, Function, а также типы, работающие по принципу copy-on-write, например string.

Где это такие глупости написаны??? Официальная дока:
http://docwiki.embarcadero.com/RADStudio/Rio/en/Variables_(Delphi)#Thread-local_Variables Thread-variable declarations:

cannot occur within a procedure or function.
cannot include initializations.
cannot specify the absolute directive.

Dynamic variables that are ordinarily managed by the compiler (long strings, wide strings, dynamic arrays, variants, and interfaces) can be declared with threadvar, but the compiler does not automatically free the heap-allocated memory created by each thread of execution. If you use these data types in thread variables, it is your responsibility to dispose of their memory from within the thread, before the thread terminates.
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39990057
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
DmSer,

warning Внимание! Согласно официальной документации, в секции threadvar нельзя объявлять переменные некоторых типов, в том числе: Pointer, Function, а также типы, работающие по принципу copy-on-write, например string.


Где это такие глупости написаны??? Официальная дока:
http://docwiki.embarcadero.com/RADStudio/Rio/en/Variables_(Delphi)#Thread-local_Variables Thread-variable declarations:

cannot occur within a procedure or function.
cannot include initializations.
cannot specify the absolute directive.

Dynamic variables that are ordinarily managed by the compiler (long strings, wide strings, dynamic arrays, variants, and interfaces) can be declared with threadvar, but the compiler does not automatically free the heap-allocated memory created by each thread of execution. If you use these data types in thread variables, it is your responsibility to dispose of their memory from within the thread, before the thread terminates.

Я взял это несколько недель назад из их официальной документации, по той же ссылке. Видимо, уже успели поменять.
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39990058
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Я взял это несколько недель назад из их официальной документации. Видимо, уже успели поменять.

Сходи по ссылке и посмотри дату последней модификации страницы.
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39990061
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дока от Delphi 2006:
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39990074
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,
Такой значит у них бардак в документации. Хорошо что заметили и поправили.
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39990126
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Измерил, как зависит количество запущенных потоков на производительность. Запускал 100000 потоков (64-битный компилятор), в каждом лишь такой код:

Код: pascal
1.
2.
while not Terminated do 
  Sleep(30000)



Т.е. потоки тупо ничего не делают.

Измерял число операций на 4-х ядрах до запуска и после запуска этих потоков. Выяснилось, что падение производительности составляет 6%. Хотя я думал, что будет намного хуже.
Замеры делал с помощью "CalcTimeQuant.exe". Выяснилось, что 3 из 4-х ядер вообще не замечают этих спящих потоков и выдают максимальную производительность. Производительность падает грубо говоря только на одном ядре (видимо на нем и работает планировщик).
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39990151
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Kazantsev Alexey,
Такой значит у них бардак в документации. Хорошо что заметили и поправили.


Ошибся. Ссылка не та все-таки. Использовал эту ссылку
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39990170
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Переработан раздел Планирование потоков

Пришлось убрать раздел "Роль кэшей процессора", т.к. выяснилось, что кэши процессора практически не играют никакой роли в планировании потоков и переключении контекста, а парить читателю мозги лишней информацией я не хочу.
Кто в теме разбирается, посмотрите на предмет того, чтобы не было дезинформации.


Последний эксперимент дал новые идеи :)
Я ещё раз переработал этот раздел!
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39990199
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,
авторЯ предполагаю, что логика обработки прерывания от системного таймера примерно такая:

системный таймер подаёт сигнал прерывания на все ядра процессора;
приостанавливается работа всех выполняемых потоков на всех ядрах процессора;
осуществляется запуск системного планировщика на одном из ядер процессора (Sheduler Core);
Руссинович и Соломон пишут вот тут https://www.microsoftpressstore.com/articles/article.aspx?p=2233328&seqNum=7 ,
авторTo make thread-scheduling decisions, the kernel maintains a set of data structures known collectively as the dispatcher database, illustrated in Figure 5-15. The dispatcher database keeps track of which threads are waiting to execute and which processors are executing which threads.

To improve scalability, including thread-dispatching concurrency, Windows multiprocessor systems have per-processor dispatcher ready queues, as illustrated in Figure 5-15. In this way each CPU can check its own ready queues for the next thread to run without having to lock the systemwide ready queues.
(Versions of Windows before Windows Server 2003 used a global database).
что, начиная с Windows server 2003 данные об очереди готовых к исполнению потоков у каждого процессора своя, так что они могут проверять каждый свою очередь, не блокируя очереди на уровне всей системы.
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39990219
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62
DmSer,
авторЯ предполагаю, что логика обработки прерывания от системного таймера примерно такая:

системный таймер подаёт сигнал прерывания на все ядра процессора;
приостанавливается работа всех выполняемых потоков на всех ядрах процессора;
осуществляется запуск системного планировщика на одном из ядер процессора (Sheduler Core);

Руссинович и Соломон пишут вот тут https://www.microsoftpressstore.com/articles/article.aspx?p=2233328&seqNum=7 ,
авторTo make thread-scheduling decisions, the kernel maintains a set of data structures known collectively as the dispatcher database, illustrated in Figure 5-15. The dispatcher database keeps track of which threads are waiting to execute and which processors are executing which threads.

To improve scalability, including thread-dispatching concurrency, Windows multiprocessor systems have per-processor dispatcher ready queues, as illustrated in Figure 5-15. In this way each CPU can check its own ready queues for the next thread to run without having to lock the systemwide ready queues.
(Versions of Windows before Windows Server 2003 used a global database).
что, начиная с Windows server 2003 данные об очереди готовых к исполнению потоков у каждого процессора своя, так что они могут проверять каждый свою очередь, не блокируя очереди на уровне всей системы.

Классная статья! По ней убеждаюсь, что информация в моей статье в разделе "планирование потоков" более-менее корректная.
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39990232
Bred eFeM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Классная статья! По ней убеждаюсь, что информация в моей статье в разделе "планирование потоков" более-менее корректная.

Просто у этих ребят было добро на публикацию "инсайдерской" инфы от MыSы.

Вот ты её же по кусочкам раньше и насобирал.
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39995674
didgik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я вот не понял п4.1
Зачем Sleep() обертывать в WaitTimeout ?
авторwarning Внимание! Если поток переведён в спящее состояние с помощью функции Sleep, то не существует другого способа выйти из этого состояния кроме истечения указанного временного периода.
И что тогда использовать вместо Sleep?
...
Рейтинг: 0 / 0
Многопоточное программирование в Delphi для начинающих
    #39995693
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
didgik
И что тогда использовать вместо Sleep?

Например в WaitFor*Object, у которого в аргументах событие, которому можно посигналить извне.
...
Рейтинг: 0 / 0
25 сообщений из 160, страница 5 из 7
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Многопоточное программирование в Delphi для начинающих
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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