Які найкращі ресурси для вивчення паралельності та багатопотокових програм? [зачинено]


16

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

Які найкращі ресурси для вивчення побудови одночасних додатків? Я дуже орієнтована на практику людина, тому якщо ця книга містить конкретні приклади, то краще, але я відкрита для пропозицій. Я особисто вважаю за краще працювати в псевдокоді або C ++, і нахил до розробки ігор був би найкращим, але не обов'язковим.


Ви віддаєте перевагу "працювати в псевдокоді"? Я сподіваюся, що це працює для вас! :)
logc

Відповіді:


6

Це книги, які мені здаються корисними останнім часом:

Конкурс Java на практиці - автор більшості утилітів спільної валюти Java. Дещо специфічні для Java, але дуже чіткі та інформативні щодо небезпек та підводних каменів.

Мистецтво Конкурсу - це не вигадливий теоретичний трактат, як підказує заголовок, насправді досить народний і суттєвий збірник корисних порад та прикладів.

Програмування одночасності на СВМ - Цей насправді є вигадливим теоретичним трактатом, але дуже, дуже читабельним і проникливим. Якщо вам потрібно знати, що таке STM або актори, які їх сильні та слабкі сторони і чому , ця книга вам розповість.

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


4

Я знайшов цей безкоштовний ресурс для різьблення, створений Джо Альбахарі чудовим ...

Нитка в C #

Він нахилений до C #, але ці поняття цілком застосовні для інших мов. Він також пропонує навчальний посібник у вигляді завантаження у форматі PDF англійською та кількома іншими мовами. Я рекомендував би це через поєднання прикладу коду, покрокові пояснення коду та відмінні діаграми послідовності та стану, що супроводжують приклади.

Підручник складається з п'яти частин:

Доступний у книжковій формі тут: C # 4.0 у двох словах (глави 23 та 24)


1
+1, це моя звичайна посилання на "перехід" на нарізку / паралельність / паралелізм у .NET
Меттью Кінг

4

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


1

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

На практиці нитка є однією з тих речей, які більшість людей думають, що вони розуміють, але не роблять. Я пішов на розмову з дослідником статичного аналізу, який визначив умови перегонів у дослідницькій базі даних IBM (Java), у файловій системі Linux (C) та в деяких інших досить гучних проектах. Деякі проекти були написані шанованими експертами з одночасності та нарізки. Майте на увазі, що створити безпечний для потоків код важко, і що розрив знань не є винятковим лише для тих, хто визнає його в собі.

Хоча це не допоможе вам прямо в ігровому програмуванні, я б рекомендував переглянути деякі підручники MPI (вибачте, конкретних рекомендацій немає). Хоча здається, що складно написати правильний паралельний код з потоками, це здається досить простим при передачі повідомлення. Очевидно, сподіваємось, що вивчення різних моделей одночасності допоможе вашому власному розумовому процесу щодо структуризації коду таким чином, щоб бути безпечним для потоків.


1

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

У ньому є повідомлення для передачі повідомлень, мютекси тощо, які охоплюють майже всі ваші потреби в одночасності та мають складніші еквіваленти на інших мовах.

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

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

Отримання int в змінну a з іншого (користувальницького) потоку в ходу:

a := <-c

Щоб навчитися йти на практиці, ознайомтеся з екскурсією, де ви можете писати, компілювати та запускати код у своєму браузері.

tour.golang.org

Щоб перейти до сумісної частини

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

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.