Каковы лучшие ресурсы для изучения параллелизма и многопоточных приложений? [закрыто]

16

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

Каковы лучшие ресурсы для изучения создания параллельных приложений? Я очень практичный человек, поэтому, если эта книга содержит конкретные примеры, тем лучше, но я открыт для предложений. Лично я предпочитаю работать в псевдокоде или C ++, и уклон к разработке игр был бы лучшим, но не обязательным.

Zepee
источник
Вы предпочитаете «работать в псевдокоде»? Я надеюсь, что это работает для вас! :)
logc

Ответы:

6

Вот книги, которые я нашел полезными в последнее время:

Java Concurrency на практике - автором многих утилит параллелизма Java. Несколько специфичный для Java, но очень четкий и информативный об опасностях и подводных камнях потоков.

Искусство параллелизма - не искрящийся теоретический трактат, как следует из названия, на самом деле это довольно простой и практичный сборник полезных советов и примеров.

Программирование Параллелизм на JVM - Это одна на самом деле является мерцающим теоретический трактат, но очень, очень читаемый и проницательный. Если вам нужно знать, что такое STM или актеры, каковы их сильные и слабые стороны и почему , эта книга расскажет вам.

Существует много специализированных библиотек утилит, таких как блоки Intel Threading Building Blocks или Apple Central Central Station, которые, как правило, имеют свои собственные специальные руководства, которые, как правило, довольно хороши и в любом случае являются обязательными для чтения, если вы хотите сделать что-то большое с ними.

Килиан Фот
источник
4

Я нашел этот бесплатный ресурс, созданный Джо Албахари, превосходным ...

Потоки в C #

Это наклонено к C #, но понятия полностью применимы к другим языкам. Он также предоставляет учебник в формате PDF для скачивания на английском и нескольких других языках. Я рекомендовал бы это из-за комбинации примера кода, пошаговых объяснений кода и превосходных диаграмм последовательности и состояний, сопровождающих примеры.

Учебник состоит из пяти частей:

Это доступно в виде книги здесь: C # 4.0 в двух словах (главы 23 и 24)

dodgy_coder
источник
1
+1, это моя обычная справочная информация о многопоточности / параллелизме / параллелизме в .NET
Мэтью Кинг,
4

Существует множество моделей параллелизма, поэтому вам лучше составить представление обо всем, прежде чем решить, какую из них выбрать. Для этого я рекомендую книгу « Семь моделей параллелизма за семь недель: когда нити распутываются» . Проверьте обзоры и оглавление, и вы поймете, почему это хорошая книга. И это тоже недавно (2014).

sakisk
источник
1

В стандарте C ++ теперь есть средства для работы с потоками. Поэтому, если вы хотите учиться на C ++, я предлагаю прочитать простой обзор новой языковой функции, прежде чем перейти к общему учебнику по многопоточности. Затем вернитесь и рассмотрите стандарт более подробно позже.

На практике многопоточность - это одна из тех вещей, которые большинство людей думают, что понимают, но не понимают. Я поговорил с исследователем статического анализа, который определил условия гонки в исследовательской базе данных IBM (Java), в файловой системе linux (C) и в некоторых других довольно громких проектах. Некоторые из проектов были написаны уважаемыми экспертами по параллелизму и многопоточности. Имейте в виду, что создание поточно-ориентированного кода сложно и что пробел в знаниях не является исключительным для тех, кто распознает его в себе.

Хотя это не поможет вам напрямую в программировании игр, я бы порекомендовал взглянуть на некоторые учебники по MPI (извините, никаких конкретных рекомендаций). В то время как кажется трудным написать правильный параллельный код с потоками, это довольно легко сделать с передачей сообщений. Косвенно, надежда состоит в том, что изучение различных моделей параллелизма поможет вашему собственному мыслительному процессу структурирования вашего кода быть поточно-ориентированным.

ccoakley
источник
1

Чтобы узнать о параллелизме, используйте язык, который был разработан для параллелизма. Golang - хороший выбор, поскольку он имеет встроенную поддержку параллелизма и C-подобный синтаксис, который делает язык легким для изучения большинством программистов.

Он имеет передачу сообщений, мьютексы и т. Д., Которые покрывают почти все ваши потребности параллелизма и которые имеют более сложные эквиваленты в других языках.

Например, получение int из другого потока в переменную aс использованием MPI в C:

MPI_Recv(&a, 1, MPI_INT, 0, 0, MPI_COMM_WORLD,MPI_STATUS_IGNORE);

Получение int в переменную a из другого (пользовательского) потока в go:

a := <-c

Для того, чтобы научиться играть на практике, посмотрите тур по го, где вы можете написать, скомпилировать и запустить код go в своем браузере.

tour.golang.org

Перейти к части параллелизма

http://tour.golang.org/concurrency/1

Мой бывший профессор провел очень популярный короткий курс для студентов первого курса по теме параллелизма. Для быстрого, но тщательного ознакомления с параллелизмом, я определенно рекомендую прочитать это.

Основы параллельного программирования

Йохан Викстрем
источник