Задачки на изучение многопоточности
От: koenjihyakkei Россия  
Дата: 15.05.22 19:44
Оценка: +1
А накидайте плиз задачек для изучения многопоточности/атомиков. Или может уже есть где годные туториалы с практическими заданиями.

Спасибо.
Re: Задачки на изучение многопоточности
От: AlexGin Беларусь  
Дата: 16.05.22 03:42
Оценка: 40 (2)
Здравствуйте, koenjihyakkei, Вы писали:

K>А накидайте плиз задачек для изучения многопоточности/атомиков. Или может уже есть где годные туториалы с практическими заданиями.


https://www.bogotobogo.com/cplusplus/multithreaded4_cplusplus11.php
https://www.softwaretestinghelp.com/multithreading-in-cpp
https://www.educative.io/blog/modern-multithreading-and-concurrency-in-cpp
https://www.geeksforgeeks.org/multithreading-in-cpp
https://coderslegacy.com/cpp-multithreading-tutorial

Всё вышеуказанное — это именно многопоточность в стиле C++11.
Характерный признак:
#include <thread>

Это современный подход для C++ проектов.

Есть также многопоточность в стиле POSIX (т.е. в стиле Си):
Характерные признаки:
#include <pthread.h>
...
pthread_create

Вот пример этого подхода:
https://www.tutorialspoint.com/cplusplus/cpp_multithreading.htm
Отредактировано 16.05.2022 3:51 AlexGin . Предыдущая версия .
Re[2]: Задачки на изучение многопоточности
От: so5team https://stiffstream.com
Дата: 16.05.22 07:36
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>Характерный признак:

AG>
AG>#include <thread>
AG>

AG>Это современный подход для C++ проектов.

Пожалуйста, не надо. Не надо считать это современным подходом.

То, что в современном C++ есть поддержка многопоточности "из коробки" не значит, что нужно пользоваться голыми std::thread, std::mutex и std::condition_variable (не говоря уже про std::atomic). Это низкоуровневые инструменты для случаев, когда ничего другого уже не подходит.

Поэтому не нужно такие вещи называть современным подходом. Повозиться с этим чтобы поэкспериментировать, набраться опыта и набить шишки -- это сколько угодно. Но чтобы вот так в чистом виде тащить в проект... Не надо.

ЗЫ. Простите за эмоциональность, любимая мозоль.
Re[3]: Задачки на изучение многопоточности
От: AlexGin Беларусь  
Дата: 16.05.22 10:50
Оценка: +1
Здравствуйте, so5team, Вы писали:

S>Пожалуйста, не надо. Не надо считать это современным подходом.


А что Вы предлагаете считать современным подходом?

То, что нам предлагается в POSIX, WinAPI?
Типа pthread_create или же _beginthreadex — так это также низкоуровневые методы.

Можно взять Qt — там уровень повыше. Но не все инструменты Qt выше.

S>ЗЫ. Простите за эмоциональность, любимая мозоль.

Ладно
Отредактировано 16.05.2022 11:49 AlexGin . Предыдущая версия .
Re[4]: Задачки на изучение многопоточности
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 16.05.22 11:18
Оценка: +2
Здравствуйте, AlexGin, Вы писали:

AG>А что Вы предлагаете считать современным подходом?


Я могу предположить, что, например, Intel TBB или аналоги, такой как taskflow.
Re[4]: Задачки на изучение многопоточности
От: so5team https://stiffstream.com
Дата: 16.05.22 11:19
Оценка: 29 (3) +1
Здравствуйте, AlexGin, Вы писали:

AG>А что Вы предлагаете считать современным подходом?


Например, инструменты вроде HPX, Intel TBB, taskflow, CAF, sobjectizer, rotor и т.д.

Да даже OpenMP, которому много лет, может быть лучше.

Если смотреть на stdlib, то на execution policy добавленные в C++17.

AG>То, что нам предлагается в POSIX, WinAPI?

AG>Типа pthread_create или же _beginthreadex — так это также низкоуровневые методы.

Именно.

AG>Можно взять Qt — там уровень повыше.


Брать Qt для чего-то кроме GUI так себе идея. Но тут уж каждый ССЗБ.
Re: Задачки на изучение многопоточности
От: sergii.p  
Дата: 16.05.22 12:25
Оценка:
Здравствуйте, koenjihyakkei, Вы писали:
Deadlock empire
вроде здесь ссылку и встречал, но повторить можно.
Re[5]: Задачки на изучение многопоточности
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 16.05.22 12:38
Оценка: +1
Здравствуйте, so5team, Вы писали:

S>Именно.

Прикольно, да. pthread_create и _beginthreadex прямо так сильно отличаются от голых std::thread и std::async.
  Скрытый текст
Вангую, будут опять рассказы что я ничего не понимаю и что всё не так, естественно без каких либо доказательств и реального кода.

S>Брать Qt для чего-то кроме GUI так себе идея. Но тут уж каждый ССЗБ.
Вовсе нет, просто ты замкнулся в своём мирке sobjectizer-а и не знаешь ничего другого, в том числе и QT, и то как он используется.
Sic luceat lux!
Re[5]: Задачки на изучение многопоточности
От: AlexGin Беларусь  
Дата: 16.05.22 12:38
Оценка:
Здравствуйте, 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.

Что же касается multi-threading, в Qt есть высокоуровневый API:
https://doc.qt.io/qt-5/threads-technologies.html
https://doc.qt.io/qt-5/qtconcurrent-index.html
https://doc.qt.io/qt-5/qfuture.html

Он в чем-то уступает предложенным Вами инструментам?

P.S. ЕМНИП тот же sobjectizer — Ваше творчество?
Re[6]: Задачки на изучение многопоточности
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 16.05.22 14:30
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>Что же касается multi-threading, в Qt есть высокоуровневый API:


А он позволяет организовать графы вычислений с разными типами соединений (очереди и т.п.) между ними?
Re[6]: Задачки на изучение многопоточности
От: so5team https://stiffstream.com
Дата: 16.05.22 15:06
Оценка:
Здравствуйте, 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, то буду признателен.
Re[6]: Задачки на изучение многопоточности
От: so5team https://stiffstream.com
Дата: 16.05.22 15:14
Оценка: 4 (1)
Здравствуйте, 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 — Ваше творчество?


Да.
Re[7]: Задачки на изучение многопоточности
От: AlexGin Беларусь  
Дата: 16.05.22 18:21
Оценка: -1
Здравствуйте, 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).
Отредактировано 16.05.2022 21:34 AlexGin . Предыдущая версия . Еще …
Отредактировано 16.05.2022 18:22 AlexGin . Предыдущая версия .
Re[2]: Задачки на изучение многопоточности
От: koenjihyakkei Россия  
Дата: 16.05.22 21:21
Оценка:
Здравствуйте, AlexGin, Вы писали:

Да не, теорию то я более менее знаю, мне бы именно какие-нибудь задачи.

Например, реализовать очередь single-reader/multiple-writer, но вот чем ее нагрузить... Или, например, задача на lock-free.

В общем, что сейчас самое распространенное в многопоточном программировании, где лучше всего можно руку набить?

ЗЫ: на текущей работе совсем не встречаюсь с канкаренси программированием, вот хотелось бы восполнить пробел.
Re[2]: Задачки на изучение многопоточности
От: koenjihyakkei Россия  
Дата: 16.05.22 21:22
Оценка:
Здравствуйте, sergii.p, Вы писали:

Так это ж С#
Re[4]: Задачки на изучение многопоточности
От: qqqqq  
Дата: 17.05.22 02:27
Оценка:
Внезапно, у этих C++ потоков не оказалось возможности задать им приоритеты. Как можно работать потоками без приоритетов? В C++ классе thread полторы функции, скорее всего там еще много чего позабыто.
Re[6]: Задачки на изучение многопоточности
От: Vzhyk2  
Дата: 17.05.22 06:25
Оценка:
S>>Например, инструменты вроде HPX, Intel TBB, taskflow, CAF, sobjectizer, rotor и т.д.
S>>Да даже OpenMP, которому много лет, может быть лучше.
AG>>>То, что нам предлагается в POSIX, WinAPI?
AG>>>Можно взять Qt — там уровень повыше.
Для этого любой и перечисленного выше годиться, а также годиться распараллеливание и на потоках стандартных и на процессах. Вопрос лишь в возможности самого распараллеливания алгоритма. Есть много алгоритмов, что не распараллеливаются вообще.
Re[5]: Задачки на изучение многопоточности
От: Vzhyk2  
Дата: 17.05.22 06:29
Оценка:
Q>Внезапно, у этих C++ потоков не оказалось возможности задать им приоритеты. Как можно работать потоками без приоритетов? В C++ классе thread полторы функции, скорее всего там еще много чего позабыто.
Это всего-лишь простейшая обертка над стандартными потоками, предлагаемыми в системе и она тебе отдает хендл и дальше извращайся с ним, как хочешь.
Re[8]: Задачки на изучение многопоточности
От: Vzhyk2  
Дата: 17.05.22 06:36
Оценка:
AG>Кстати, что касается "закручивания_гаек": брать Qt пользователю из РБ в последние полтора месяца просто так — невозможно.
AG>Выручает — только vpn (на IP-шник из Беларуси — отказ). Приходится прикидываться гейропейцем
Можешь еще собирать сам из исходников.
Re[3]: Задачки на изучение многопоточности
От: sergii.p  
Дата: 17.05.22 06:39
Оценка:
Здравствуйте, koenjihyakkei, Вы писали:

K>Так это ж С#


какая разница? Все механизмы ведь идентичные.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.