Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Многопоточность. Куда копать?


Автор: cppGhost 9.1.2014, 15:49
День добрый. Решив серьезно заняться пробелами в многопоточном программировании, столкнулся с такой проблемой: а в какую сторону именно смотреть.

1) есть новый стандарт. однако приду я на собеседование, а мне там скажут "ну у нас проект не новый и когда мы перейдем на c++11 неизвестно)
2) есть boost asio. тут тоже вещь не самая распространенная. (хотя насколько я понимаю c++11 вышел именно оттуда, но с какими то изменениями)
3) есть библиотеки, позволяющие все это реализовывать. сюда отношу win32 функции и прочее

можно сказать, что принцип везде один и тот же, что переход с одного на другое дело несложное (хотя уже вижу, много нюансов между c++11 и тем же win32). хочется выбрать наиболее всеобъемлющий вариант. Что посоветуете?

Автор: baldina 9.1.2014, 16:16
сам же сказал
Цитата(cppGhost @  9.1.2014,  15:49 Найти цитируемый пост)
принцип везде один и тот же


boost asio это не многопоточность. она там используется как инструмент, но тема то другая.

лучше наверно  с++11: стандартно, кроссплатформенно, содержит все необходимые фичи и понятия.

еще есть тема распределенных вычислений - тут надо конкретные технологии изучать, OpenMP например

Автор: vinter 9.1.2014, 16:17
Boost.Asio это I\O, т.е. многопоточность не реализуется этой библиотекой, а только используется. Лучше всего смотреть на C++11 и Boost.Thread. Они наиболее универсальны. Но универсальность накладывает и ограничения.  Есть неплохая http://www.amazon.com/C-Concurrency-Action-Practical-Multithreading/dp/1933988770/ref=sr_1_1?ie=UTF8&qid=1389273423&sr=8-1&keywords=concurrency+in+action по многопоточности в C++. Если мне не изменяет память, то она и на русском выходила.

Автор: baldina 9.1.2014, 16:36
http://www.ozon.ru/context/detail/id/17636939/

Автор: cppGhost 10.1.2014, 11:54
Спасибо. Именно ее и продолжаю читать. Буду надеяться, что стандарт есть стандарт и скоро все равно на него перейдет большинство

Автор: azesmcar 13.1.2014, 17:10
Цитата(vinter @  9.1.2014,  16:17 Найти цитируемый пост)
 Если мне не изменяет память, то она и на русском выходила

Выходила smile 
У соседа на столе лежит.
А книга в самом деле хорошая.

Автор: Wuffur 21.1.2014, 07:13
Помимо уже упомянутого здесь OpenMP, есть ещё достаточно большое количество других технологий. Boinc - peer2peer вычисления на свободной архивы(смотрите проекты folding@home, rosetta@home),
есть CUDA, которая уже ближе к Си++, чем к обычному Си (использование ядер, то есть блочно-нитевая структура выглядит один к одному как шаблоны в Си++ <<<blocks, threads>>>SomeFunction(parameter1, parameter2) - обычно внутри скобок передаются массивы). Для серьёзных вычислений существует ещё MPI - у него есть различные реализации OpenMPI(У меня какие-то траблы с ним smile ), MPICH2(норм - Linux, Windows, MacOS), MVIAPICH(работает на высокоскоростной сети Infiniband - половина суперкомпьютеров top-500 и нашего топ-100 наверное 70 штук, ну Т-Платформы жеж! и наверное РСК их продвигает, хотя они что-то с охлаждением любят заморачиваться ИМХО). Это для распределённых вычислений по сети, а для одной машины, то есть с одним физическим пространством памяти, подходят как уже сказалиOpenMP, OpenACC(если у вас есть видеокарта NVidia) - это разработка Portland Group, которую купила Nvidia(смотрите CUDA альманах http://www.nvidia.ru/object/cuda-parallel-computing-almanac-ru.html). Есть ещё deprecated, то есть устаревший(последний коммит в код в 2009) PVM. Ну, если хотите выберете что по душе или лучше по задаче. Параллелизм внутри ОС поддерживает планировщик - как известно есть realtime(реального времени) ОС(QNX к примеру, или крайне неудачная WindowsRT, планшеты с которой пришлось все в США отдать школьникам) и multitasking(многозадачные) ОС(Windows, как известно он перестаёт быть многозадачным, если поставить дискету в флопик или CD или USB флешку!!! и начинает тупо подвисать, Linux и MacOS(обе POSIX) и всякие research OS - Inferno, PlanB, FiascoOC(хотя последняя притендует на решение реальных задач), и даже в том же MicroSoft, была ОС  не помню как её зовут, вспомню вставлю, у них есть подразделение MS Research, в недрах которого обкатывалась .Net, чтобы избавится от морально устаревших COM объектов. Ну ещё есть модели параллельности или последовательной загрузки внутри планировщика ОС - семафоры, мьютексы, потоки, нити, сообщения, каналы именованные/неименованые - см. книжки Таненбаума - классику или попроще Андрея Робачевского.

Автор: VSB 23.1.2014, 12:33
Цитата(Wuffur @  21.1.2014,  07:13 Найти цитируемый пост)
Windows, как известно он перестаёт быть многозадачным

12309 уже починили?

Автор: akizelokro 24.1.2014, 00:53
Нормальные наниматели напишут, какой специалист им нужен. И boost::asio напишут. Что ожидать от ненормальных нанимателей, - см. тему об собеседованиях.

Добавлено через 6 минут и 7 секунд
В смысле нормальные наниматели не обязаны писать обязательно boost::asio(?, это дело менегеров проекта, какой они инструментарий выберут). Есть другие типы вакансий с малозначительной портянкой в один обзац (но там наниматели сами походу не знают, какой специалист им нужен.. на заметку!).
Вопросы о будущем языка и библиотеки boost:: оставлю для любителей поговорить.

Добавлено через 6 минут и 32 секунды
Книги зашибись, но лучше бы и опыт работ

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)