powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Шаблон класса для работы с потоком (WThread, Thread)
25 сообщений из 469, страница 13 из 19
Шаблон класса для работы с потоком (WThread, Thread)
    #39305032
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanЯ-бы попробовал, если-бы мне сказали, что это лучше/быстрее/надежнее.
микрософт вроде так и говорит

msdnI/O completion ports provide an efficient threading model for processing multiple asynchronous I/O requests on a multiprocessor system. When a process creates an I/O completion port, the system creates an associated queue object for requests whose sole purpose is to service these requests. Processes that handle many concurrent asynchronous I/O requests can do so more quickly and efficiently by using I/O completion ports in conjunction with a pre-allocated thread pool than by creating threads at the time they receive an I/O request.
вы им доверяете?
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39305040
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)вы им доверяете?
Они сравнивали с моим решением?
Про Оку тоже писали, что это комфортный пятиместный автомобиль и кому верить?
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39305053
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

если бы я знал
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39305323
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Системный threadpool однозначно быстрее чем TThread. В нашей библиотеке я его использую, например для многопоточного QuickSort, так там даже на относительно небольших объемах данных видно ускорение, которое с использованием TThread наоборот привело бы к замедлению из-за накладных расходов
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39305438
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerСистемный threadpool однозначно быстрее чем TThread.
Два вопроса...
1. Быстрее в каком качестве?
К примеру, нужно проверить информацию в базе и по результату запустить печать.
Я делаю просто: один поток проверяет, другой печатает.
2. Как тут (на практике) пул потоков может ускорить процесс?

П.С. Пул это нечто, что держит энное количество потоков с режиме ожидания и дергает их по мере необходимости? Тогда не вижу проблем, я именно так и делаю: запускаю потоки в любое удобное мне время и они ждут команды. Обертка, по сути, на это и ориентирована.
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39305458
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanДва вопроса...
1. Быстрее в каком качестве?
К примеру, нужно проверить информацию в базе и по результату запустить печать.
Я делаю просто: один поток проверяет, другой печатает.
2. Как тут (на практике) пул потоков может ускорить процесс?

П.С. Пул это нечто, что держит энное количество потоков с режиме ожидания и дергает их по мере необходимости? Тогда не вижу проблем, я именно так и делаю: запускаю потоки в любое удобное мне время и они ждут команды. Обертка, по сути, на это и ориентирована.Зависит от конкретной задачи. У тебя этот юнит ведь тоже чтоб что-то распараллелить а потом сообщать о выполнении. Создание thread относительно тяжелая системная функция, плюс накладываются делфёвые расходы по созданию объекта. По сравнению с этим распараллеливание через Thread Pooling эффективно и производительнее. В качестве примера я привёл распараллеливание сортировки (также фильтрации, итерирования). Поскольку в делфи нет обертки для этого, поэтому обычно юзают наследников TThread. Если сравнить распараллеливание через системный пул и TThread последний проиграет по быстродействию (точнее непосредственно по запуску и завершению "распараллеленного" куска кода). Для кого-то это может быть критично. В наших продуктах используются оба подхода
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39305467
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerУ тебя этот юнит ведь тоже чтоб что-то распараллелить а потом сообщать о выполнении.
Распараллелить - да, но не одну задачу, а несколько разных . Потому пул тут не подходит.
Хотя можно и под одну задачу приспособить. Например при поиске строки в файлах.

Все тормоза упираются только в создание экземпляра.
Это не существенно в сравнении с основным циклом задач, когда приложение (например служба) стартует один раз и работает до конца.
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39305473
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanРаспараллелить - да, но не одну задачу, а несколько разных . Потому пул тут не подходит.
Хотя можно и под одну задачу приспособить. Например при поиске строки в файлах.Системному пулу тоже пофигу что параллелить. Я просто для примера привел пример где у нас юзается. Кстати, надо будет ReplaceString попробовать реализовать через пул (где-то топик был, где попугаями мерялись :))
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39305476
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerwadmanРаспараллелить - да, но не одну задачу, а несколько разных . Потому пул тут не подходит.
Хотя можно и под одну задачу приспособить. Например при поиске строки в файлах.Системному пулу тоже пофигу что параллелить. Я просто для примера привел пример где у нас юзается. Кстати, надо будет ReplaceString попробовать реализовать через пул (где-то топик был, где попугаями мерялись :))
С юникодом replacestring не получится. С анси (то есть побайтно) - да.
Можем помериться на досуге. :)
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39305633
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerСистемный threadpool однозначно быстрее чем TThreadнет никаких принципиальных препятствий реализовать user space пул не менее эффективно чем ядровый хотя конечно второй даже при абсолютно одинаковой реализации всегда будет чуточку проворнее. но это еще надо суметь так нагрузить чтоб заметить
white_niggerвидно ускорение, которое с использованием TThread наоборот привело бы к замедлению из-за накладных расходовwhite_niggerСоздание thread относительно тяжелая системная функция, плюс накладываются делфёвые расходы по созданию объекта. По сравнению с этим распараллеливание через Thread Pooling эффективно и производительнеебудто кто-то заставляет каждый раз создавать потоки
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39305786
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavanнет никаких принципиальных препятствий реализовать user space пул не менее эффективно чем ядровый хотя конечно второй даже при абсолютно одинаковой реализации всегда будет чуточку проворнее. но это еще надо суметь так нагрузить чтоб заметитьНу напиши эфективный пул, сравним на примере той же многопоточной сортировки...
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39305842
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerСистемный threadpool однозначно быстрее чем TThread.Подождите товарищи! О каком системном пуле идет речь, применительно к порту завершения? Порт завершения - это же просто ядерная очередь операций ввода/вывода. Пул потоков для работы с ним один фиг надо создавать самому.
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39305864
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57Подождите товарищи! О каком системном пуле идет речь, применительно к порту завершения? Порт завершения - это же просто ядерная очередь операций ввода/вывода. Пул потоков для работы с ним один фиг надо создавать самому.А что с ним не так? " You can also use the BindIoCompletionCallback function to post asynchronous I/O operations. On completion of the I/O , the callback is executed by a thread pool thread."
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39305874
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger, MSDNThe thread pool maintains an I/O completion portтеперь понятно, что имелось ввиду. Только в этом случае уже не надо самому создавать порт завершения)
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39305900
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerНу напиши эфективный пулменя пока устраивает тот что я использую и не хватало к вороху уже существующих готовых еще один писать
хотя 10+ лет назад я юзал именно родной виндовый, правда еще первой версии
white_niggerсравним на примере той же многопоточной сортировкинет у меня такой насущной необходимости чтоб этим заниматься
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39323851
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил компонент. Теперь можно кидать батоны потоки на форму и дергать таски. :)
Task - это задача, которая выполняется в доп. потоке.
Задач может быть много и все они выполнятся в порядке очереди.

Пример использования:
Код: 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.
28.
29.
30.
31.
32.
33.
procedure TForm1.Button3Click(Sender: TObject);
begin
    WCThread.Tasks[0].Start(10); // так задача запускается, параметр Variant
    Memo1.Lines.Add('Started');
end;

// вот эта задача, которая выполняется уже в доп. потоке
// никаких обращений к VCL отсюда! 
procedure TForm1.WCThreadTasks0Execute(Sender: TTaskItem);
var i: integer;
begin
    for i := 0 to Sender.Param-1 do
        // так проверяем, что задачу или поток еще не убили
        if not Sender.Terminated then begin
            Sleep(1000);
            // так сообщаем о прогрессе в основной поток
            Sender.PostProgress(i+1);
        end;
end;

procedure TForm1.WCThreadTasks0Progress(Sender: TTaskItem; const Value: Word);
begin
    // это прогресс, выполняется в основном потоке
    Memo1.Lines.Add(Format('Progress %d', [Value]));
end;

procedure TForm1.WCThreadTasks0Finished(Sender: TTaskItem);
begin
    // задача выполнена, сообщаем об этом
    Memo1.Lines.Add('Finished');
    // а можно запустить, к примеру, следующую (или не следующую) задачу 
    // WCThread.Tasks[1].Start('SomeString');
end;
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39323872
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
думаю заюзать твой класс плюс BrainMM в одном чудовищном 19760178 приложении...
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39323873
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorв одном чудовищном 19760178 приложении...
Хоть-бы рассказал, чего там чудовищного, что необходимо аж знать потолок количества потоков. :)
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39323876
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
wadmandefecatorв одном чудовищном 19760178 приложении...
Хоть-бы рассказал, чего там чудовищного, что необходимо аж знать потолок количества потоков. :)
софтина с сотнями тыщ потоков, взаимодействующих между собой.
правда, внутри каждого потока примитивный простой код.
потом расскажу, если получится всё это запустить
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39323879
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorwadmanпропущено...

Хоть-бы рассказал, чего там чудовищного, что необходимо аж знать потолок количества потоков. :)
софтина с сотнями тыщ потоков, взаимодействующих между собой.
правда, внутри каждого потока примитивный простой код.
потом расскажу, если получится всё это запуститьчую нейронную сеть))
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39323881
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorесли получится всё это запуститьмашина ляжет) или выдаст тебе отказ по ресурсам ОС....
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39323882
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57defecatorесли получится всё это запуститьмашина ляжет) или выдаст тебе отказ по ресурсам ОС....
19760178
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39323885
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Barmaley57defecatorесли получится всё это запуститьмашина ляжет) или выдаст тебе отказ по ресурсам ОС....
не ляжет, на серваке со 128 гигами оперативы создалось чуть больше пяти миллионов потоков (которые TThread),
четыре процессора по 3.2 ГГц по четыре ядра на каждом плюс гипертрейд на каждом ядре.
Суммарная нагрузка была в районе 55-65 процентов.

Barmaley57чую нейронную сеть))
Точно, только другой структуры, не классической.
Надо опробовать идею
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39323888
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorне ляжет, на серваке со 128 гигами оперативы создалось чуть больше пяти миллионов потоков (которые TThread),
четыре процессора по 3.2 ГГц по четыре ядра на каждом плюс гипертрейд на каждом ядре.
Суммарная нагрузка была в районе 55-65 процентов.Гы!!! Стек потоков уменьшал с дефолта что-ли? Главное, чтобы стека хватило. Ну и ресурсов на обслуживание всего этого дела ОСь должна отхавать нехило. Тормоза сильно ощущались после этого выкрутаса?
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39323890
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять таки, очереди сообщений то хватит, чтобы заюзать класс wadman'a?
...
Рейтинг: 0 / 0
25 сообщений из 469, страница 13 из 19
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Шаблон класса для работы с потоком (WThread, Thread)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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