|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
Fr0sT-Brutal теперь хром плодит свои копии интенсивней, чем зерглинги вылупляются! 146%! И на старых машинах иногда завешивает проц вусмерть. roschinspb Прогрессбар можно перерисовать и repaint-ом если только в таймере. Интересно, сколько таймеров можно запустить без заметного вреда для софтины? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 08:32 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
мне кажется эта статья описывает многопоточность достаточно хорошо, многое оттуда взять можно https://forum.vingrad.ru/topic-60076.html ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 08:45 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
cptngrb мне кажется эта статья описывает многопоточность достаточно хорошо, многое оттуда взять можно https://forum.vingrad.ru/topic-60076.html Да, я с нею знакомился. Она не для начинающих. Писалась в те времена, когда программирование было уделом гениев. Очень тяжело усваивается. Думаю, мало кто осилит дочитать более 30% (до БАБ врядли дело дойдет :) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 10:36 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
Zelius ... пришлось так делать когда использовал bass что бы писать интернет радио... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 18:50 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
Док . Интересно, сколько таймеров можно запустить без заметного вреда для софтины? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2020, 04:16 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
Добавлен раздел планирование потоков ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2020, 10:56 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
Может пригодиться и такая инфа: CAS https://ru.wikipedia.org/wiki/Сравнение_с_обменом FAA https://en.wikipedia.org/wiki/Fetch-and-add ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2020, 18:01 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
spinlock https://ru.wikipedia.org/wiki/Спин-блокировка I/O Completion Ports https://docs.microsoft.com/en-us/windows/win32/fileio/i-o-completion-ports ------ Не всем, и не всегда нужна кроссплатформенность. Бывает, что важнее выжать по-максимуму из возможностей ОС и процессора. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2020, 18:15 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
s62, Использовал чтото высокоуровневое, просто урл передавал, под капот потока не смотрел ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2020, 21:11 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
Док, зы. на скруле всегда так, как только тема исчерпывается, начинается оффтоп Рано! Кучу материалов изучаю по многопоточности. Что-нибудь получится! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 18:10 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
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 "Создание многопоточных приложений". По-моему довольно простое, понятное изложение, при этом затронуты разные темы, в том числе многопоточный доступ к БД, графика. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2020, 13:31 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
Переработан раздел Планирование потоков Пришлось убрать раздел "Роль кэшей процессора", т.к. выяснилось, что кэши процессора практически не играют никакой роли в планировании потоков и переключении контекста, а парить читателю мозги лишней информацией я не хочу. Кто в теме разбирается, посмотрите на предмет того, чтобы не было дезинформации. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 14:56 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 15:25 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
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. Я взял это несколько недель назад из их официальной документации, по той же ссылке. Видимо, уже успели поменять. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 16:32 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
DmSer Я взял это несколько недель назад из их официальной документации. Видимо, уже успели поменять. Сходи по ссылке и посмотри дату последней модификации страницы. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 16:37 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 16:44 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
Kazantsev Alexey, Такой значит у них бардак в документации. Хорошо что заметили и поправили. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 17:09 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
Измерил, как зависит количество запущенных потоков на производительность. Запускал 100000 потоков (64-битный компилятор), в каждом лишь такой код: Код: pascal 1. 2.
Т.е. потоки тупо ничего не делают. Измерял число операций на 4-х ядрах до запуска и после запуска этих потоков. Выяснилось, что падение производительности составляет 6%. Хотя я думал, что будет намного хуже. Замеры делал с помощью "CalcTimeQuant.exe". Выяснилось, что 3 из 4-х ядер вообще не замечают этих спящих потоков и выдают максимальную производительность. Производительность падает грубо говоря только на одном ядре (видимо на нем и работает планировщик). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 20:57 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
DmSer Kazantsev Alexey, Такой значит у них бардак в документации. Хорошо что заметили и поправили. Ошибся. Ссылка не та все-таки. Использовал эту ссылку ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2020, 22:33 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
DmSer Переработан раздел Планирование потоков Пришлось убрать раздел "Роль кэшей процессора", т.к. выяснилось, что кэши процессора практически не играют никакой роли в планировании потоков и переключении контекста, а парить читателю мозги лишней информацией я не хочу. Кто в теме разбирается, посмотрите на предмет того, чтобы не было дезинформации. Последний эксперимент дал новые идеи :) Я ещё раз переработал этот раздел! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2020, 00:05 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
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 данные об очереди готовых к исполнению потоков у каждого процессора своя, так что они могут проверять каждый свою очередь, не блокируя очереди на уровне всей системы. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2020, 12:38 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
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 данные об очереди готовых к исполнению потоков у каждого процессора своя, так что они могут проверять каждый свою очередь, не блокируя очереди на уровне всей системы. Классная статья! По ней убеждаюсь, что информация в моей статье в разделе "планирование потоков" более-менее корректная. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2020, 18:31 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
DmSer Классная статья! По ней убеждаюсь, что информация в моей статье в разделе "планирование потоков" более-менее корректная. Просто у этих ребят было добро на публикацию "инсайдерской" инфы от MыSы. Вот ты её же по кусочкам раньше и насобирал. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2020, 00:54 |
|
Многопоточное программирование в Delphi для начинающих
|
|||
---|---|---|---|
#18+
А я вот не понял п4.1 Зачем Sleep() обертывать в WaitTimeout ? авторwarning Внимание! Если поток переведён в спящее состояние с помощью функции Sleep, то не существует другого способа выйти из этого состояния кроме истечения указанного временного периода. И что тогда использовать вместо Sleep? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2020, 14:40 |
|
|
start [/forum/topic.php?fid=58&msg=39989804&tid=2036872]: |
0ms |
get settings: |
19ms |
get forum list: |
8ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
37ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
574ms |
get tp. blocked users: |
0ms |
others: | 3662ms |
total: | 4306ms |
0 / 0 |