|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Мне не нравится C++ Multi-threading из- за большого количества кода, за которым теряется суть программы. К тому же на него бочку катят из-за сложности отладки и большого количества потенциальных ошибок (ненадежности). OpenMP не позволяет работать с циклами, у которых окончание итераций по условию (например, окончание файла или достижение заданного результата). Intel Trading Blocks- нет литературы на русском, да и код превращается в адовы кирпичи. Что посоветуете? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2017, 22:40 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
_beginthreadex() рекомендую. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2017, 22:49 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
AlekseySQLЧто посоветуете? Начать с чего попроще перед тем, как лезть в многопоточку. Учебники там разные... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2017, 23:30 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
AlekseySQL, multutheading это не опция С++ а свойство ОС (Linux, Windows) и выбирать надо сначала то под что будешь кодить в будущем. Тоесть это не вопрос вкуса а скорее обстоятельство или начальные условия. P.S. Посмотри Boost.Thread. Возможно с некоторой натяжкой сойдет за то что тебе нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 00:46 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
AlekseySQLМне не нравится C++ Multi-threading из- за большого количества кода, за которым теряется суть программы. К тому же на него бочку катят из-за сложности отладки и большого количества потенциальных ошибок (ненадежности). Это касается любого ЯП. Это обратная сторона многопоточности. AlekseySQLЧто посоветуете? Стандартные средства С++ std::async std::thread и все что связано с синхронизацией Можешь свою обертку написать. Делаешь менеджер потоков, класс "задача" и дальше ты генеришь задачи, а менеджер рассовывает задачи по потокам. Можешь почитать например как в C# это устроено, класс Task<T>. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 06:54 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
maytonAlekseySQL, multutheading это не опция С++ а свойство ОС (Linux, Windows) и выбирать надо сначала то под что будешь кодить в будущем. Тоесть это не вопрос вкуса а скорее обстоятельство или начальные условия. P.S. Посмотри Boost.Thread. Возможно с некоторой натяжкой сойдет за то что тебе нужно. Вообще- то уже давно созданы кроссплатформенные инструменты. Например, тот же Boost.Thread И среди этих кроссплатформенных средств я как раз и выбираю. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 10:29 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dima TAlekseySQLМне не нравится C++ Multi-threading из- за большого количества кода, за которым теряется суть программы. К тому же на него бочку катят из-за сложности отладки и большого количества потенциальных ошибок (ненадежности). Это касается любого ЯП. Это обратная сторона многопоточности. AlekseySQLЧто посоветуете? Стандартные средства С++ std::async std::thread и все что связано с синхронизацией Можешь свою обертку написать. Делаешь менеджер потоков, класс "задача" и дальше ты генеришь задачи, а менеджер рассовывает задачи по потокам. Можешь почитать например как в C# это устроено, класс Task<T>. Второе утверждение противоречит первому :) В С# оказывается не все так плохо: есть уже более высокий уровень абстракции в виде задач. Разумеется под C# писать не буду, и обдумываю написать свой менеджер задач. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 10:34 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
AlekseySQLВторое утверждение противоречит первому Не противоречит, просто ты еще не пробовал асинхронные алгоритмы отлаживать :) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 10:48 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
AlekseySQLМне не нравится C++ Multi-threading из- за большого количества кода, за которым теряется суть программы. Что посоветуете? Я как раз именно библиотеку многопоточности C++ и посоветую. std::thread и так далее, бывшая boost thread. Она просто великолепна. Я уверен, что ты не ее имел в виду в первой строке. Open MP конечно хорошо, но это для тупых математикав, которым лень программировать. Ну и что из заставит взяться за C++ - не понятно, у них есть великолепный Fortran, который очень хорошо всё это делает. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 10:59 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
maytonAlekseySQL, multutheading это не опция С++ а свойство ОС (Linux, Windows) и выбирать надо сначала то под что будешь кодить в будущем. уже нет, уже у нас есть встроенная ванильная многопоточность. Переносимая, стандартная. С С++11. maytonP.S. Посмотри Boost.Thread. Возможно с некоторой натяжкой сойдет за то что тебе нужно. не нужен уже Boost.Thread, он уже вошел в стандарт. конечно, это если у вас есть с++ компилятор. VC уже поддерживает. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 11:05 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
MasterZiv, Про Open MP... Это очень классная вещь, но она для очень тупых случаев. Представьте, что вам нужно просчитать среднюю зарплату по всему населению Земли... это тупо много, поэтому будет тупо долго, но если разбить на N кусков и отдать каждый своему потоку, а потом еще раз усреднить, то будет тупо в N раз (почти) быстрее. Вот такие тупые задачи решает Open MP. но зато она делает это автоматически, что очень приятно. часто вы такие задачи решали? я лично - ни разу за всю жизнь и карьеру. так что для программирования на C++ оно практически не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 11:18 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
MasterZivЯ как раз именно библиотеку многопоточности C++ и посоветую. std::thread и так далее, бывшая boost thread. Она просто великолепна. Сейчас изучаю книжку "Параллельное программирование на С++ в действии". Как изучу отпишусь с вопросами :) MasterZivMasterZiv, Про Open MP... С умным человеком и поговорить приятно :) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 11:51 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
AlekseySQLMasterZivЯ как раз именно библиотеку многопоточности C++ и посоветую. std::thread и так далее, бывшая boost thread. Она просто великолепна. Сейчас изучаю книжку "Параллельное программирование на С++ в действии". Как изучу отпишусь с вопросами :) Во, это -- самая правильная книжка. Мало того, что хорошо написана, так ещё и написана именно автором этой библиотеки (подсистемы поддержки многопоточности в стандартной библиотеке С+) - Anthony Williams. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 12:13 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
MasterZivуже нет, уже у нас есть встроенная ванильная многопоточность. Переносимая, стандартная. С С++11. И при этом она совершенно отстойна в том плане, что заставляет делать прыжки в ширину для в общем-то тривиальных (в нативном API) задач. Например, не даёт подождать завершения одного любого потока из пула. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 12:13 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
MasterZivAlekseySQLпропущено... Сейчас изучаю книжку "Параллельное программирование на С++ в действии". Как изучу отпишусь с вопросами :) Во, это -- самая правильная книжка. Мало того, что хорошо написана, так ещё и написана именно автором этой библиотеки (подсистемы поддержки многопоточности в стандартной библиотеке С+) - Anthony Williams. Читал в оригинале на английском. Скажу лишь, что она совсем не для новичков. Мало того, тема атомарных операций и, в частности, memory_order'а не в совсем понятной манере, что приходилось "напрягаться" сверх нормы, чтобы осилить. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 12:49 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovMasterZivуже нет, уже у нас есть встроенная ванильная многопоточность. Переносимая, стандартная. С С++11. И при этом она совершенно отстойна в том плане, что заставляет делать прыжки в ширину для в общем-то тривиальных (в нативном API) задач. Например, не даёт подождать завершения одного любого потока из пула. Чего? JOIN и всё... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 16:44 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
NekZMasterZivAnthony Williams. Скажу лишь, что она совсем не для новичков. Да ну, всё разжёвано и в рот положено, начиная с азов. NekZМало того, тема атомарных операций и, в частности, memory_order'а не в совсем понятной манере, что приходилось "напрягаться" сверх нормы, чтобы осилить. Ну, это -- вообще далеко не самая простая и очевидная вещь, и на самом деле не самая нужная для конечного разработчика. В принципе, её не обязательно понимать глубоко, или даже вообще понимать. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 16:51 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
MasterZivЧего? JOIN и всё... Ну да, ну да. Вот только join это метод std::thread, который ждёт завершения этого конкретного потока. А теперь внимательно перечитывай "любого одного потока" до просветления. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 17:39 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovMasterZivЧего? JOIN и всё... Ну да, ну да. Вот только join это метод std::thread, который ждёт завершения этого конкретного потока. А теперь внимательно перечитывай "любого одного потока" до просветления. В смысле -- ХОТЯ БЫ одного ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 19:18 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
MasterZivВ смысле -- ХОТЯ БЫ одного ? Дословно. У тебя есть 20 потоков и ты ждёшь завершения любого из них. Аварийного или штатного - без разницы. Как такое обеспечить в случае std::thread? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 19:21 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovMasterZivВ смысле -- ХОТЯ БЫ одного ? Дословно. У тебя есть 20 потоков и ты ждёшь завершения любого из них. Аварийного или штатного - без разницы. Как такое обеспечить в случае std::thread? Хоть std::thread появился и на том спасибо. Уже не надо кучу #ifdef WIN32 ... По хорошему еще надо std::thread_pool и там это реализовать. Много еще чего надо, но стандартописатели не торопятся. А этот вопрос вроде как можно через std::thread::native_handle порешать. Без std::thread прыгать гораздо шире надо было. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 19:39 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovMasterZivВ смысле -- ХОТЯ БЫ одного ? Дословно. У тебя есть 20 потоков и ты ждёшь завершения любого из них. Аварийного или штатного - без разницы. Как такое обеспечить в случае std::thread? В стандарте есть "продвинутые" потоки future/async. Например, есть 4 потока и ждешь пока освободиться любой из них успешного или аварийного, и так 20 раз. http://coliru.stacked-crooked.com/a/d1d43d9111f669be Код: plaintext 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. 34.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 20:31 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
AlekseySQLМне не нравится C++ Multi-threading из- за большого количества кода, за которым теряется суть программы. А все же, что ты имел в виду конкретно? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 21:23 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Вася УткинНапример, есть 4 потока и ждешь пока освободиться любой из них успешного или аварийного, и так 20 раз. Опрос состояния всех потоков в цикле. Прэлееестно. Это даже не прыжки в ширину, это бег на месте с препятствиями. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 21:31 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovВася УткинНапример, есть 4 потока и ждешь пока освободиться любой из них успешного или аварийного, и так 20 раз. Опрос состояния всех потоков в цикле. Прэлееестно. Это даже не прыжки в ширину, это бег на месте с препятствиями. К тому же никто не обещал что там есть какие-то потоки. Больше похоже на node.js стиль ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 22:26 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
MasterZivAlekseySQLМне не нравится C++ Multi-threading из- за большого количества кода, за которым теряется суть программы. А все же, что ты имел в виду конкретно? Стандартную библиотеку С++ :) Не хватает оберток над потоками, чтобы из-за более высокой абстракции количество кода уменьшилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 23:06 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 23:16 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
MasterZivmaytonP.S. Посмотри Boost.Thread. Возможно с некоторой натяжкой сойдет за то что тебе нужно. не нужен уже Boost.Thread, он уже вошел в стандарт. конечно, это если у вас есть с++ компилятор. VC уже поддерживает. Ну... классно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 01:03 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
MasterZivНу, это -- вообще далеко не самая простая и очевидная вещь, и на самом деле не самая нужная для конечного разработчика. В принципе, её не обязательно понимать глубоко, или даже вообще понимать. Не сказал бы так... Если от тебя требуется выжать максимум производительности, как от low latency programmer'а, то часто приходится прибегать к "программированию без блокировок", напрасно не тратя время на бессмысленные переключения контекста (что является убийцей высокой производительности). Именно тогда-то атомики и решают. Учитывая, что они включены в стандартную библиотеку, и не требуется больше никаких зависимостей. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 13:45 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
NekZMasterZivНу, это -- вообще далеко не самая простая и очевидная вещь, и на самом деле не самая нужная для конечного разработчика. В принципе, её не обязательно понимать глубоко, или даже вообще понимать. Не сказал бы так... Если от тебя требуется выжать максимум производительности, как от low latency programmer'а, то часто приходится прибегать к "программированию без блокировок", напрасно не тратя время на бессмысленные переключения контекста (что является убийцей высокой производительности). Именно тогда-то атомики и решают. Учитывая, что они включены в стандартную библиотеку, и не требуется больше никаких зависимостей. Ерунда. 90% производительности не в этом закладывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 15:49 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovВася УткинНапример, есть 4 потока и ждешь пока освободиться любой из них успешного или аварийного, и так 20 раз. Опрос состояния всех потоков в цикле. Прэлееестно. Это даже не прыжки в ширину, это бег на месте с препятствиями. Извольте показать свой вариант, как бы сделали это вы, или как бы в идеале это должно было быть реализовано внутри C++ или OS ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 16:02 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Я так понимаю речь о WaitForMultipleObjects() если речь про виндовс. Подсунул ей массив хэндлов потоков и жди. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 16:11 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dima TЯ так понимаю речь о WaitForMultipleObjects() если речь про виндовс. Подсунул ей массив хэндлов потоков и жди. Я так понимаю Dimitry Sibiryakov знает какую-то намного более простую и быструю реализацию подобного WaitForMultipleObjects(), но написать её не может :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 16:44 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dima TЯ так понимаю речь о WaitForMultipleObjects() если речь про виндовс. Подсунул ей массив хэндлов потоков и жди. Да, именно о нём. И я более чем уверен, что внутри его реализации нет цикла, а есть занесение текущего потока в список ожидания для всех alertable objеcts из массива и спокойный сон до вызова resume при изменении состояния любого из этих объектов. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 16:52 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovDima TЯ так понимаю речь о WaitForMultipleObjects() если речь про виндовс. Подсунул ей массив хэндлов потоков и жди. Да, именно о нём. И я более чем уверен, что внутри его реализации нет цикла, а есть занесение текущего потока в список ожидания для всех alertable objеcts из массива и спокойный сон до вызова resume при изменении состояния любого из этих объектов. Так и есть, т.к. это средства ОС. Виндовс просто перестает выделять потоку кванты времени пока хотя бы один из хэндлов не перейдет в сигнальное состояние, т.е. завершится поток. КПД 100%, пробуждение мгновенное. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 19:11 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Вася Уткин Код: plaintext 1.
А потом ищем почему прога тупит. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 19:14 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dima TВася Уткин Код: plaintext 1.
А потом ищем почему прога тупит. Так так так, интересно, почему? Подскажи, а то тут прога тупит с ожиданием 1мс между проверкой статусов потоков на ОС с квантом времени >=1мс. Какие книжки почитать? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 20:06 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Вася УткинDima Tпропущено... А потом ищем почему прога тупит. Так так так, интересно, почему? Подскажи, а то тут прога тупит с ожиданием 1мс между проверкой статусов потоков на ОС с квантом времени >=1мс. Какие книжки почитать? Потому что квант 10-20 мс, от того что ты 1 мс попросил это не факт что ОС ровно через 1мс тебе управление вернет. Если не загружена - вернет. Да и потоков за 1 мс может пачка отработать. Запусти Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 20:22 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dima TВася Уткинпропущено... Так так так, интересно, почему? Подскажи, а то тут прога тупит с ожиданием 1мс между проверкой статусов потоков на ОС с квантом времени >=1мс. Какие книжки почитать? Потому что квант 10-20 мс, от того что ты 1 мс попросил это не факт что ОС ровно через 1мс тебе управление вернет. Если не загружена - вернет. Да и потоков за 1 мс может пачка отработать. Спасибо, а поток ожидающий (уснувший) на стандартном виндовом WaitForMultipleObjects() гарантированно не больше чем за 1мс проснется после того как один из ожидаемых потоков завершится? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 20:47 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Вася УткинСпасибо, а поток ожидающий (уснувший) на стандартном виндовом WaitForMultipleObjects() гарантированно не больше чем за 1мс проснется после того как один из ожидаемых потоков завершится? гарантий нет ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 20:50 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Вася УткинDima Tпропущено... Потому что квант 10-20 мс, от того что ты 1 мс попросил это не факт что ОС ровно через 1мс тебе управление вернет. Если не загружена - вернет. Да и потоков за 1 мс может пачка отработать. Спасибо, а поток ожидающий (уснувший) на стандартном виндовом WaitForMultipleObjects() гарантированно не больше чем за 1мс проснется после того как один из ожидаемых потоков завершится? Гарантий нет, виндовс не реалтайм ОС, но скорее всего время будет единицы нано секунд. Принцип простой: поток завершился, ОС смотрит кто ожидает его завершения (как правило это один поток) и дает квант времени ожидающему. Примитивно описал, как оно реально происходит MS не разглашает. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 21:03 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dima TВася Уткинпропущено... Спасибо, а поток ожидающий (уснувший) на стандартном виндовом WaitForMultipleObjects() гарантированно не больше чем за 1мс проснется после того как один из ожидаемых потоков завершится? Гарантий нет, виндовс не реалтайм ОС, но скорее всего время будет единицы нано секунд. Принцип простой: поток завершился, ОС смотрит кто ожидает его завершения (как правило это один поток) и дает квант времени ожидающему. Примитивно описал, как оно реально происходит MS не разглашает. А если все ядра заняты? Т.е. переключение контекста занимает единицы нано-секунд? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 21:08 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Математика простая: 3 ГГц = 3 млрд. операций, т.е. за 1 мс будет 3 млн. операций. Вот и думай что можно сделать за 3 млн. операций. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 21:13 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dima TМатематика простая: 3 ГГц = 3 млрд. операций, т.е. за 1 мс будет 3 млн. операций. Вот и думай что можно сделать за 3 млн. операций. Т.е. т.к. за 1мс процессор совершит 3 млн операций, то если все ядра заняты, то произойдет переключение контекста на поток ожидающий WaitForMultipleObjects() за единицы наносекунд? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 21:29 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Вася УткинDima TМатематика простая: 3 ГГц = 3 млрд. операций, т.е. за 1 мс будет 3 млн. операций. Вот и думай что можно сделать за 3 млн. операций. Т.е. т.к. за 1мс процессор совершит 3 млн операций, то если все ядра заняты, то произойдет переключение контекста на поток ожидающий WaitForMultipleObjects() за единицы наносекунд? Во первых ядра не все заняты, как минимум одно освободилось, т.к. ждали завершение потока. Т.е. один завершился, ожидающий его запустился. А может не запустился, а только встал в очередь на выполнение. ХЗ как оно в реале происходит когда одновременно работает потоков больше чем ядер, МС это не описывает. Переключение контекста тоже не такое уж и сложное дело, там восстановление состояния регистров проца происходит. Сколько точно оно занимает - не знаю, 3 операций, 30 или 300. Возвращаясь к цифрам 1 нс это 3 операции проца. Пусть я ошибаюсь и это сотни наносекунд, все равно это в 1000+ раз меньше чем 1 мс. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 09:19 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Придумал как грубо замерить переключения контекста Код: plaintext 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.
У меня 27 наносекунд получилось. Правда в тесте еще мутекс переключается, поэтому само переключение контекста еще быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 11:37 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Не то померил, там без переключения один и тот же поток мьютекс захватывает многократно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 11:54 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dima TПотому что квант 10-20 мс, от того что ты 1 мс попросил это не факт что ОС ровно через 1мс тебе управление вернет. Если не загружена - вернет . Dima TВо первых ядра не все заняты, как минимум одно освободилось , т.к. ждали завершение потока. Т.е. один завершился, ожидающий его запустился. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 13:42 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Из контекста слова не вырывай. Если частично цитируешь, то бери абзац целиком. Dima TВо первых ядра не все заняты, как минимум одно освободилось, т.к. ждали завершение потока. Т.е. один завершился, ожидающий его запустился. А может не запустился, а только встал в очередь на выполнение. ХЗ как оно в реале происходит когда одновременно работает потоков больше чем ядер, МС это не описывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 13:54 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dima TТак и есть, т.к. это средства ОС. Виндовс просто перестает выделять потоку кванты времени пока хотя бы один из хэндлов не перейдет в сигнальное состояние, т.е. завершится поток. КПД 100%, пробуждение мгновенное. Dima TВо первых ядра не все заняты, как минимум одно освободилось, т.к. ждали завершение потока. Т.е. один завершился, ожидающий его запустился. А может не запустился, а только встал в очередь на выполнение. ХЗ как оно в реале происходит когда одновременно работает потоков больше чем ядер, МС это не описывает. Т.е. обычный виндовый WaitForMultipleObjects() вообще не гарантирует, что поток его ожидающий продолжит выполнение через 1нс или 1мс или даже 1 секунду после завершения ожидаемого потока? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 14:11 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Вася УткинТ.е. обычный виндовый WaitForMultipleObjects() вообще не гарантирует, что поток его ожидающий продолжит выполнение через 1нс или 1мс или даже 1 секунду после завершения ожидаемого потока? Виндовс не гарантирует конкретное время, т.к. это не ОС реального времени, а ОС с вытесняющей многозадачностью. Если будут работать потоки с более высоким приоритетом, то твои будут ждать пока они закончат. Если будет работать много потоков с одинаковым приоритетом, то твой станет в очередь. Вобщем виндовс гарантирует что будет стараться дать проц твоему потоку как можно быстрее. В лучшем случае это наносекунды, в худшем как получится. Почитай Рихтера Глава 7. Планирование потоков Глава 9. Синхронизация потоков ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 14:40 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
std::async После работы async-ов, например, этой , обнаруживаю кучу потоков в процессе, хотя все они отработали. Это пул? Как почистить? Надо ли это делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 07:49 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
]Мне не нравится C++ Multi-threading из- за большого количества кода, за которым теряется суть программы. К тому же на него бочку катят из-за сложности отладки и большого количества потенциальных ошибок (ненадежности). Параллельное программирование в принципе сложное, И тут ничего не сделаешь, надо просто учиться. OpenMP и другие подобные вещи хороши тем, что работают автоматом, плохо, что не всегда. Лучшие вещи надо делать руками. Так что у тебя собственно нет выбора, либо учись, либо не занимайся параллельным программированием. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 09:08 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Есть интервью с Дональдом Кнутом от 2008 года http://citforum.ru/gazeta/76/ Маэстро довольно резко отзывается о технологии. Для него Pipeline полезнее чем многопоточка. Жаль что тема не была развита до асинков и корутинов. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 10:59 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
MasterZivТак что у тебя собственно нет выбораДа, в общем-то, у меня проблем и не было о_о Я просто хотел узнать про почему потоки остаются в процессе? Судя по докам, потоки могут браться из пула потоков, а раз могу браться, значит туда могут и складываться , вот хотел поподробнее узнать про пул. Так-то я обычно, да, руками создаю треди (beginthreadex) и разруливаю мьютексами. Но тут понадобилось рабочий код, в котором есть некоторый контекст, разрезать на две параллельные части, одна из которых - запрос в базу. Всё хорошо, но контекст вокруг надо куда-то сложить, а потом достать. Т.е. надо организовывать вариативное хранилище данных с диспетчером. А усложнять код не хотелось. Пошёл почитать, что нового есть в плюсах по многопоточности. Нашёл async, который позволяет скинуть всю функцию вместе с сигнатурой в поток. Отлично! MasterZivМне не нравится C++ Multi-threading из- за большого количества кода, за которым теряется суть программы.Это немного странно. maytonДля него Pipeline полезнее чем многопоточка.Иногда без многопоточки гораздо хуже. Если, к примеру, есть реалтайм, в котором много вычислений и много рисований. Можно параллельно что-то одно считать, а другое рисовать. При этом легко можно управлять скоростью пересчёта и рендеринга отдельно. Тогда как в одном потоке, мало того, что медленнее, так ещё и сложнее это сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 11:19 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
CEMb, это испорченный телефон. MasterZiv запамятовал что теме полтора года и что он в ней уже участвовал и снова ответил топик стартеру. Но сделал это с кривой разметкой цаитирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 11:30 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
CEMbИногда без многопоточки гораздо хуже. Если, к примеру, есть реалтайм, в котором много вычислений и много рисований. Можно параллельно что-то одно считать, а другое рисовать. При этом легко можно управлять скоростью пересчёта и рендеринга отдельно. Тогда как в одном потоке, мало того, что медленнее, так ещё и сложнее это сделать. Я в этом услышал другое. Большинство современных приложений. Особенно декстоп. Это event-driven. Яркий пример - основной цикл WNDPROC. Обработали событие - и освободились. Фоновые задачи (догрузка картинок из интернетов) тоже имеют место. Но они все - суть асинхронные вызовы. Возьмем сеть идут сетевые пакеты. Строго последовательно. Приложение - сервис которое их обрабатывае тоже может работать последовательно. Особенно для класса OLTP-систем. За редким случаем когда идут расчеты в физике или обработка графики (рендеринг) или распознавание. Но и эти задачи по большей части проходят со слабой concurrency. Фактически независимые задания - которые мержат результат в какой-то один получатель. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 14:13 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
maytonЯркий пример - основной цикл WNDPROC. И ты хорошо знаешь что будет если в этом потоке начать делать что-то кроме цикла выборки сообщений, а в обработку события запихать что-то тяжелее установки флагом и рассылки тех самых event-ов. maytonВозьмем сеть идут сетевые пакеты. Строго последовательно. Приложение - сервис которое их обрабатывае тоже может работать последовательно. Может, но при этом не нужно удивляться если UDP пакеты теряются, а скорость передачи внезапно ниже, чем пропускная способность сети, поскольку необработанные пакеты громоздятся в буферах, на них не отсылается ACK и передающая сторона начинает забивать свои буфера, а потом и блокировать отправку. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 14:27 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
AlekseySQLМне не нравится C++ Multi-threading из- за большого количества кода, за которым теряется суть программы. К тому же на него бочку катят из-за сложности отладки и большого количества потенциальных ошибок (ненадежности). OpenMP не позволяет работать с циклами, у которых окончание итераций по условию (например, окончание файла или достижение заданного результата). Intel Trading Blocks- нет литературы на русском, да и код превращается в адовы кирпичи. Что посоветуете? https://www.threadingbuildingblocks.org/ ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 14:28 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovmaytonЯркий пример - основной цикл WNDPROC. И ты хорошо знаешь что будет если в этом потоке начать делать что-то кроме цикла выборки сообщений, а в обработку события запихать что-то тяжелее установки флагом и рассылки тех самых event-ов. Я беру за основу 99% юзкейсов UI приложения. В них обычно простая логика. Конечный автомат с быстрым срабатыванием баръеров. Джобы и фоновые задания - это OK/ Я согласен. Обсуждается отдельно и тестируется. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 14:30 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovМожет, но при этом не нужно удивляться если UDP пакеты теряются, а скорость передачи внезапно ниже, чем пропускная способность сети, поскольку необработанные пакеты громоздятся в буферах, на них не отсылается ACK и передающая сторона начинает забивать свои буфера, а потом и блокировать отправку. Это неудачный пример. UDP изначально - протокол-камикадзе. Протокол взаимодейтвия с DNS предполагает очень быструю реакцию (это +1) и нечуствительность к одиночным потерям. Или системы вещания медийного трафика где пропажа кадра видео не оказывает влияния на результат в целом. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 14:36 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
AlekseySQL, SSIS прекрасно умеет многопоточить несколько десятков потоков. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 14:38 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
maytonЭто неудачный пример. UDP изначально - протокол-камикадзе. Плюсы у него тоже есть. Гугл уже 5 лет пилит свой протокол QUIC (Quick UDP Internet Connections) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 14:43 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
maytonЯркий пример - основной цикл WNDPROC.У WNDPROC очередь с приоритетами. И, наверно, было бы неплохо, если можно было свои вещи встраивать в эту очередь. О чём я: у меня запрос в базу через ADO, база далеко, основной поток встаёт в ожидании весь. В идеале, я отправил запрос, одно событие, получил ответ - второе. Ну, т.е. так и надо делать. Но самому. А WNDPROC это уже есть. Я вот тут пишу сейчас код быстро, так получилось. Хотел сделать индикацию ожидания запросов из базы, прогрессбар. Но основной поток занят, надо делать отдельный поток, который будет: 1. по таймеру обновлять прогресс, 2. выгребать и диспатчить WNDPROC, иначе прогресс будет не виден глазами... Но в результате вынес сами запросы в отдельные потоки, теперь можно наблюдать гонки заполнения продуктов в приложении по мере выполнения запросов, а индикация крутится по таймеру/событиям в основном потоке. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2018, 05:22 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
CEMbу меня запрос в базу через ADO, база далеко, основной поток встаёт в ожидании весь. В идеале, я отправил запрос, одно событие, получил ответ - второе. А найти и включить у ADO асинхронный режим - задача непосильная для среднего программиста, ага. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2018, 13:12 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovА найти и включить у ADO асинхронный режим - задача непосильная для среднего программиста, ага. Ага. Ну, для начала, не хочется отдавать управление потоками ADO. А во-вторых, я как-то не думал в эту сторону. Посмотрю, спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2019, 05:44 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
CEMbНу, для начала, не хочется отдавать управление потоками ADO. Ты не поверишь, но для асинхронности в ADO не (всегда) используются потоки. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2019, 13:56 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovТы не поверишья поверю, просто дело в контроле, хочется это место самому контролировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2019, 05:34 |
|
|
start [/forum/topic.php?all=1&fid=57&tid=2017683]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
83ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 183ms |
0 / 0 |