Здравствуйте, koenjihyakkei, Вы писали:
K>А накидайте плиз задачек для изучения многопоточности/атомиков. Или может уже есть где годные туториалы с практическими заданиями.
Здравствуйте, AlexGin, Вы писали:
AG>Характерный признак: AG>
AG>#include <thread>
AG>
AG>Это современный подход для C++ проектов.
Пожалуйста, не надо. Не надо считать это современным подходом.
То, что в современном C++ есть поддержка многопоточности "из коробки" не значит, что нужно пользоваться голыми std::thread, std::mutex и std::condition_variable (не говоря уже про std::atomic). Это низкоуровневые инструменты для случаев, когда ничего другого уже не подходит.
Поэтому не нужно такие вещи называть современным подходом. Повозиться с этим чтобы поэкспериментировать, набраться опыта и набить шишки -- это сколько угодно. Но чтобы вот так в чистом виде тащить в проект... Не надо.
Да даже OpenMP, которому много лет, может быть лучше.
Если смотреть на stdlib, то на execution policy добавленные в C++17.
AG>То, что нам предлагается в POSIX, WinAPI? AG>Типа pthread_create или же _beginthreadex — так это также низкоуровневые методы.
Именно.
AG>Можно взять Qt — там уровень повыше.
Брать Qt для чего-то кроме GUI так себе идея. Но тут уж каждый ССЗБ.
Здравствуйте, so5team, Вы писали: S>Именно.
Прикольно, да. pthread_create и _beginthreadex прямо так сильно отличаются от голых std::thread и std::async.
Скрытый текст
Вангую, будут опять рассказы что я ничего не понимаю и что всё не так, естественно без каких либо доказательств и реального кода.
S>Брать Qt для чего-то кроме GUI так себе идея. Но тут уж каждый ССЗБ.
Вовсе нет, просто ты замкнулся в своём мирке sobjectizer-а и не знаешь ничего другого, в том числе и QT, и то как он используется.
Здравствуйте, so5team, Вы писали:
AG>А что Вы предлагаете считать современным подходом?
S>Например, инструменты вроде HPX, Intel TBB, taskflow, CAF, sobjectizer, rotor и т.д.
Хорошо, спасибо!
А что можно взять из этого, для простого распараллеливания — ну скажем математических вычислений?
S>Да даже OpenMP, которому много лет, может быть лучше. S>Если смотреть на stdlib, то на execution policy добавленные в C++17.
AG>>То, что нам предлагается в POSIX, WinAPI? AG>>Типа pthread_create или же _beginthreadex — так это также низкоуровневые методы.
S>Именно.
AG>>Можно взять Qt — там уровень повыше.
S>Брать Qt для чего-то кроме GUI так себе идея. Но тут уж каждый ССЗБ.
В том же Qt и для Data Base есть поддержка, и для Network, и для File System.
Здравствуйте, Kernan, Вы писали:
S>>Именно. K>Прикольно, да. pthread_create и _beginthreadex прямо так сильно отличаются от голых std::thread и std::async. K>Вангую, будут опять рассказы что я ничего не понимаю и что всё не так, естественно без каких либо доказательств и реального кода.
Прежде чем перейти к рассказам очень бы хотелось увидеть где я говорил, что голые std::thread выше уровнем, чем pthread_create/_beginthread или наоборот.
И особенно интересно увидеть где я что-либо говорил про std::async.
S>>Брать Qt для чего-то кроме GUI так себе идея. Но тут уж каждый ССЗБ. K>Вовсе нет, просто ты замкнулся в своём мирке sobjectizer-а и не знаешь ничего другого, в том числе и QT, и то как он используется.
Про QT ничего не знаю (подозреваю, что это QuickTime).
С Qt знаком года с 1998-го. Во времена Qt3/4 написал на Qt не одну тысячу строк и сделал пару проектов.
Но про Qt5 и, тем более, про Qt6 знаю немного. Если есть какие-то бенчмарки сетевых приложений, написанных на Qt, показывающих превосходство Qt над Asio, ACE, libuv или libev/libevent, то буду признателен.
Здравствуйте, AlexGin, Вы писали:
AG>А что можно взять из этого, для простого распараллеливания — ну скажем математических вычислений?
Не моя область совершенно, но из общей эрудиции вспоминается, что для простого распараллеливания применяются OpenMP, HPX, Intel TBB (только Intel сейчас вроде как закрутил гайки в отношении разработчиков из РФ и РБ), taskflow.
S>>Брать Qt для чего-то кроме GUI так себе идея. Но тут уж каждый ССЗБ. AG>В том же Qt и для Data Base есть поддержка, и для Network, и для File System.
Qt -- это сама по себе платформа. Или даже так: это замкнутая сама на себя экосистема. Которая, к тому же, с годами захватывает своих пользователей во все большую и большую кабалу. Пока вы живете полностью в этой экосистеме, то все хорошо (хотя к производительности отдельных компонентов Qt, насколько я помню, были претензии). Но если вы захотите, к примеру, какую-то часть кода из Qt-шного проекта перенести в не-Qt-шный (скажем, самописную поддержку какого-то протокола на QtNetwork), то... То вы подсадите на Qt еще один проект. Тогда как аналогичная реализация на Asio, например, может спокойно использоваться как в Qt-шных проектах, так и не в Qt-шный.
Впрочем, я же сказал, каждый ССЗБ, если Qt устраивает, то почему бы и да.
AG>P.S. ЕМНИП тот же sobjectizer — Ваше творчество?
Здравствуйте, so5team, Вы писали:
S>Не моя область совершенно, но из общей эрудиции вспоминается, что для простого распараллеливания применяются OpenMP, HPX, Intel TBB (только Intel сейчас вроде как закрутил гайки в отношении разработчиков из РФ и РБ), taskflow.
Спасибо, покопаю в этом направлении.
S>Брать Qt...
Кстати, что касается "закручивания_гаек": брать Qt пользователю из РБ в последние полтора месяца просто так — невозможно.
Выручает — только vpn (на IP-шник из Беларуси — отказ). Приходится прикидываться гейропейцем
AG>В том же Qt и для Data Base есть поддержка, и для Network, и для File System.
S>Qt -- это сама по себе платформа. Или даже так: это замкнутая сама на себя экосистема. Которая, к тому же, с годами захватывает своих пользователей во все большую и большую кабалу.
Ну это можно сказать практически о любой платформе/технологии/фреймворке
С другой стороны — при разработке на C++/Qt кабалы вроде никакой нет.
Проект на C++: хочешь используй фичи Qt, хочешь — C++ (ила даже ANSI_C).
Внезапно, у этих C++ потоков не оказалось возможности задать им приоритеты. Как можно работать потоками без приоритетов? В C++ классе thread полторы функции, скорее всего там еще много чего позабыто.
S>>Например, инструменты вроде HPX, Intel TBB, taskflow, CAF, sobjectizer, rotor и т.д. S>>Да даже OpenMP, которому много лет, может быть лучше. AG>>>То, что нам предлагается в POSIX, WinAPI? AG>>>Можно взять Qt — там уровень повыше.
Для этого любой и перечисленного выше годиться, а также годиться распараллеливание и на потоках стандартных и на процессах. Вопрос лишь в возможности самого распараллеливания алгоритма. Есть много алгоритмов, что не распараллеливаются вообще.
Q>Внезапно, у этих C++ потоков не оказалось возможности задать им приоритеты. Как можно работать потоками без приоритетов? В C++ классе thread полторы функции, скорее всего там еще много чего позабыто.
Это всего-лишь простейшая обертка над стандартными потоками, предлагаемыми в системе и она тебе отдает хендл и дальше извращайся с ним, как хочешь.
AG>Кстати, что касается "закручивания_гаек": брать Qt пользователю из РБ в последние полтора месяца просто так — невозможно. AG>Выручает — только vpn (на IP-шник из Беларуси — отказ). Приходится прикидываться гейропейцем
Можешь еще собирать сам из исходников.