Jakie są najlepsze zasoby do nauki o współbieżności i aplikacjach wielowątkowych? [Zamknięte]

16

Zdałem sobie sprawę, że mam ogromną lukę w wiedzy, jeśli chodzi o aplikacje wielowątkowe i programowanie równoległe. W przeszłości omówiłem kilka podstaw, ale wydaje się, że większość z nich zniknęła z mojego umysłu i zdecydowanie jest to dziedzina, o której chcę i muszę mieć większą wiedzę.

Jakie są najlepsze zasoby do nauki o tworzeniu współbieżnych aplikacji? Jestem bardzo praktyczną osobą, więc jeśli wspomniana książka zawiera konkretne przykłady, tym lepiej, ale jestem otwarta na sugestie. Ja osobiście wolę pracować w pseudokodzie lub C ++, a pochylenie w kierunku rozwoju gier byłoby najlepsze, ale nie wymagane.

Zepee
źródło
Wolisz „pracować w pseudokodzie”? Mam nadzieję, że Ci się spodoba! :)
log

Odpowiedzi:

6

Oto książki, które ostatnio uznałem za przydatne:

Współbieżność Java w praktyce - autor wielu narzędzi do współbieżności Java. Nieco specyficzne dla Javy, ale bardzo jasne i pouczające o zagrożeniach i pułapkach związanych z wątkami.

Sztuka współbieżności - nie iskrzący traktat teoretyczny, jak sugeruje tytuł, w rzeczywistości dość ludowe i przyziemne kompendium przydatnych porad i przykładów.

Programowanie współbieżności w JVM - w rzeczywistości jest to iskrzący traktat teoretyczny, ale bardzo, bardzo czytelny i wnikliwy. Jeśli chcesz wiedzieć, czym jest STM lub aktorzy, jakie są ich mocne i słabe strony i dlaczego , ta książka powie ci.

Istnieje wiele dedykowanych bibliotek narzędziowych, takich jak bloki Intel Threading Building Blocks lub Grand Central Station firmy Apple - mają one zazwyczaj własne podręczniki, które zazwyczaj są całkiem dobre, a poza tym są obowiązkowe, jeśli chcesz zrobić z nimi coś dużego.

Kilian Foth
źródło
4

Znalazłem ten darmowy zasób wątków przygotowany przez Joe Albahari doskonały ...

Wątek w C #

Jest pochylony w kierunku C #, ale pojęcia są w pełni stosowane w innych językach. Udostępnia również samouczek w formacie PDF do pobrania w języku angielskim i kilku innych językach. Poleciłbym go ze względu na kombinację przykładowego kodu, wyjaśnienia kodu krok po kroku oraz doskonałe diagramy sekwencji i stanów towarzyszące przykładom.

Samouczek składa się z pięciu części:

Jest dostępny w formie książki tutaj: C # 4.0 w pigułce (rozdziały 23 i 24)

dodgy_coder
źródło
1
+1, to jest moje zwykłe odniesienie do wątków / współbieżności / równoległości w .NET
Matthew King
1

Obecnie są dostępne wątki w standardzie C ++. Więc jeśli chcesz się uczyć w C ++, sugeruję przeczytanie prostej recenzji nowej funkcji języka przed przejściem do ogólnego samouczka wątków. Następnie wróć i przejrzyj standard bardziej szczegółowo później.

W praktyce wątki to jedna z tych rzeczy, które większość ludzi uważa, że ​​rozumieją, ale nie rozumieją. Poszedłem na rozmowę z badaczem analizy statycznej, który zidentyfikował warunki rasowe w bazie danych badań IBM (Java), w systemie plików linux (C) oraz w kilku innych dość głośnych projektach. Niektóre projekty zostały napisane przez szanowanych ekspertów w dziedzinie współbieżności i wątków. Pamiętaj, że tworzenie kodu zabezpieczającego wątki jest trudne i że luka w wiedzy nie jest wyłączna dla tych, którzy rozpoznają go w sobie.

Chociaż nie pomoże ci to bezpośrednio w programowaniu gier, polecam zapoznanie się z samouczkami MPI (przepraszam, brak konkretnych zaleceń). Chociaż pisanie poprawnego współbieżnego kodu z wątkami wydaje się trudne, wydaje się, że jest to dość łatwe przy przekazywaniu wiadomości. Pośrednio, mamy nadzieję, że eksploracja różnych modeli współbieżności pomoże twojemu własnemu procesowi przemyślenia struktury kodu tak, aby był bezpieczny w wątkach.

Ccoakley
źródło
1

Aby dowiedzieć się więcej o współbieżności, użyj języka zaprojektowanego dla współbieżności. Golang jest dobrym wyborem, ponieważ ma wbudowaną obsługę współbieżności i składnię podobną do C, co ułatwia naukę języka większości programistów.

Ma przekazywanie wiadomości, muteksy itp., Które pokrywają prawie wszystkie Twoje potrzeby w zakresie współbieżności i które mają bardziej skomplikowane odpowiedniki w innych językach.

Na przykład odbieranie int z innego wątku do zmiennej aprzy użyciu MPI w C:

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

Odbieranie int do zmiennej a z innego (użytkownika) wątku w drodze:

a := <-c

Aby nauczyć się go w praktyce, sprawdź przewodnik go, w którym możesz pisać, kompilować i uruchamiać kod go w przeglądarce.

tour.golang.org

Aby przejść do części współbieżności

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

Mój były profesor przeprowadził bardzo popularny krótki kurs dla studentów pierwszego roku CS na temat współbieżności. W celu szybkiego, ale dokładnego zapoznania się z tym, czym jest współbieżność, zdecydowanie polecam przeczytanie tego.

Podstawy programowania współbieżnego

Johan Wikström
źródło