|
|
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
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. вы им доверяете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 11:50 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)вы им доверяете? Они сравнивали с моим решением? Про Оку тоже писали, что это комфортный пятиместный автомобиль и кому верить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 11:55 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, если бы я знал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 12:03 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Системный threadpool однозначно быстрее чем TThread. В нашей библиотеке я его использую, например для многопоточного QuickSort, так там даже на относительно небольших объемах данных видно ускорение, которое с использованием TThread наоборот привело бы к замедлению из-за накладных расходов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 16:06 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
white_niggerСистемный threadpool однозначно быстрее чем TThread. Два вопроса... 1. Быстрее в каком качестве? К примеру, нужно проверить информацию в базе и по результату запустить печать. Я делаю просто: один поток проверяет, другой печатает. 2. Как тут (на практике) пул потоков может ускорить процесс? П.С. Пул это нечто, что держит энное количество потоков с режиме ожидания и дергает их по мере необходимости? Тогда не вижу проблем, я именно так и делаю: запускаю потоки в любое удобное мне время и они ждут команды. Обертка, по сути, на это и ориентирована. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 18:32 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanДва вопроса... 1. Быстрее в каком качестве? К примеру, нужно проверить информацию в базе и по результату запустить печать. Я делаю просто: один поток проверяет, другой печатает. 2. Как тут (на практике) пул потоков может ускорить процесс? П.С. Пул это нечто, что держит энное количество потоков с режиме ожидания и дергает их по мере необходимости? Тогда не вижу проблем, я именно так и делаю: запускаю потоки в любое удобное мне время и они ждут команды. Обертка, по сути, на это и ориентирована.Зависит от конкретной задачи. У тебя этот юнит ведь тоже чтоб что-то распараллелить а потом сообщать о выполнении. Создание thread относительно тяжелая системная функция, плюс накладываются делфёвые расходы по созданию объекта. По сравнению с этим распараллеливание через Thread Pooling эффективно и производительнее. В качестве примера я привёл распараллеливание сортировки (также фильтрации, итерирования). Поскольку в делфи нет обертки для этого, поэтому обычно юзают наследников TThread. Если сравнить распараллеливание через системный пул и TThread последний проиграет по быстродействию (точнее непосредственно по запуску и завершению "распараллеленного" куска кода). Для кого-то это может быть критично. В наших продуктах используются оба подхода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 19:17 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
white_niggerУ тебя этот юнит ведь тоже чтоб что-то распараллелить а потом сообщать о выполнении. Распараллелить - да, но не одну задачу, а несколько разных . Потому пул тут не подходит. Хотя можно и под одну задачу приспособить. Например при поиске строки в файлах. Все тормоза упираются только в создание экземпляра. Это не существенно в сравнении с основным циклом задач, когда приложение (например служба) стартует один раз и работает до конца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 19:35 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanРаспараллелить - да, но не одну задачу, а несколько разных . Потому пул тут не подходит. Хотя можно и под одну задачу приспособить. Например при поиске строки в файлах.Системному пулу тоже пофигу что параллелить. Я просто для примера привел пример где у нас юзается. Кстати, надо будет ReplaceString попробовать реализовать через пул (где-то топик был, где попугаями мерялись :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 19:41 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
white_niggerwadmanРаспараллелить - да, но не одну задачу, а несколько разных . Потому пул тут не подходит. Хотя можно и под одну задачу приспособить. Например при поиске строки в файлах.Системному пулу тоже пофигу что параллелить. Я просто для примера привел пример где у нас юзается. Кстати, надо будет ReplaceString попробовать реализовать через пул (где-то топик был, где попугаями мерялись :)) С юникодом replacestring не получится. С анси (то есть побайтно) - да. Можем помериться на досуге. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 19:54 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
white_niggerСистемный threadpool однозначно быстрее чем TThreadнет никаких принципиальных препятствий реализовать user space пул не менее эффективно чем ядровый хотя конечно второй даже при абсолютно одинаковой реализации всегда будет чуточку проворнее. но это еще надо суметь так нагрузить чтоб заметить white_niggerвидно ускорение, которое с использованием TThread наоборот привело бы к замедлению из-за накладных расходовwhite_niggerСоздание thread относительно тяжелая системная функция, плюс накладываются делфёвые расходы по созданию объекта. По сравнению с этим распараллеливание через Thread Pooling эффективно и производительнеебудто кто-то заставляет каждый раз создавать потоки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 09:40 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
vavanнет никаких принципиальных препятствий реализовать user space пул не менее эффективно чем ядровый хотя конечно второй даже при абсолютно одинаковой реализации всегда будет чуточку проворнее. но это еще надо суметь так нагрузить чтоб заметитьНу напиши эфективный пул, сравним на примере той же многопоточной сортировки... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 12:37 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
white_niggerСистемный threadpool однозначно быстрее чем TThread.Подождите товарищи! О каком системном пуле идет речь, применительно к порту завершения? Порт завершения - это же просто ядерная очередь операций ввода/вывода. Пул потоков для работы с ним один фиг надо создавать самому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 13:37 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
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." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 13:55 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
white_nigger, MSDNThe thread pool maintains an I/O completion portтеперь понятно, что имелось ввиду. Только в этом случае уже не надо самому создавать порт завершения) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 14:02 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
white_niggerНу напиши эфективный пулменя пока устраивает тот что я использую и не хватало к вороху уже существующих готовых еще один писать хотя 10+ лет назад я юзал именно родной виндовый, правда еще первой версии white_niggerсравним на примере той же многопоточной сортировкинет у меня такой насущной необходимости чтоб этим заниматься ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2016, 14:29 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Добавил компонент. Теперь можно кидать батоны потоки на форму и дергать таски. :) 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 15:31 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
думаю заюзать твой класс плюс BrainMM в одном чудовищном 19760178 приложении... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 15:50 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
defecatorв одном чудовищном 19760178 приложении... Хоть-бы рассказал, чего там чудовищного, что необходимо аж знать потолок количества потоков. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 15:54 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmandefecatorв одном чудовищном 19760178 приложении... Хоть-бы рассказал, чего там чудовищного, что необходимо аж знать потолок количества потоков. :) софтина с сотнями тыщ потоков, взаимодействующих между собой. правда, внутри каждого потока примитивный простой код. потом расскажу, если получится всё это запустить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 15:57 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
defecatorwadmanпропущено... Хоть-бы рассказал, чего там чудовищного, что необходимо аж знать потолок количества потоков. :) софтина с сотнями тыщ потоков, взаимодействующих между собой. правда, внутри каждого потока примитивный простой код. потом расскажу, если получится всё это запуститьчую нейронную сеть)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 15:59 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
defecatorесли получится всё это запуститьмашина ляжет) или выдаст тебе отказ по ресурсам ОС.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 16:01 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Barmaley57defecatorесли получится всё это запуститьмашина ляжет) или выдаст тебе отказ по ресурсам ОС.... 19760178 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 16:04 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Barmaley57defecatorесли получится всё это запуститьмашина ляжет) или выдаст тебе отказ по ресурсам ОС.... не ляжет, на серваке со 128 гигами оперативы создалось чуть больше пяти миллионов потоков (которые TThread), четыре процессора по 3.2 ГГц по четыре ядра на каждом плюс гипертрейд на каждом ядре. Суммарная нагрузка была в районе 55-65 процентов. Barmaley57чую нейронную сеть)) Точно, только другой структуры, не классической. Надо опробовать идею ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 16:07 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
defecatorне ляжет, на серваке со 128 гигами оперативы создалось чуть больше пяти миллионов потоков (которые TThread), четыре процессора по 3.2 ГГц по четыре ядра на каждом плюс гипертрейд на каждом ядре. Суммарная нагрузка была в районе 55-65 процентов.Гы!!! Стек потоков уменьшал с дефолта что-ли? Главное, чтобы стека хватило. Ну и ресурсов на обслуживание всего этого дела ОСь должна отхавать нехило. Тормоза сильно ощущались после этого выкрутаса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 16:12 |
|
||
|
|

start [/forum/topic.php?fid=58&startmsg=39305032&tid=2039179]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 244ms |
| total: | 386ms |

| 0 / 0 |
