Przez ostatni rok dużo pracowałem nad współbieżnością w Javie i zbudowałem i pracowałem nad wieloma współbieżnymi pakietami. Jeśli chodzi o rozwój we współczesnym świecie, jestem całkiem pewny. Ponadto jestem bardzo zainteresowany, aby dowiedzieć się więcej na temat programowania równoległego.
Ale nie jestem w stanie odpowiedzieć sobie, co dalej? Czego powinienem się nauczyć lub pracować, aby odziedziczyć więcej umiejętności związanych z przetwarzaniem wielordzeniowym. Czy jest jakaś fajna książka (przeczytana i podobająca się „współbieżność w praktyce” i „współbieżne programowanie w Javie”) lub zasoby związane z przetwarzaniem wielordzeniowym, aby przejść do następnego poziomu?
concurrency
multi-core
Jatin
źródło
źródło
Odpowiedzi:
Oświadczenie - nie jestem ekspertem od współbieżności, ale moim współautorem jest, papuguję go :-)
Odkąd przeczytałeś książki Douga Lei i Briana Goetza, zdecydowanie umieściłeś najlepsze dostępne materiały.
Idąc dalej, pojawiły się nowe ulepszenia współbieżności w Javie 7. Najbardziej zauważalne są ramy Fork / Join i nowe asynchroniczne interfejsy API NIO.
Java 8 wprowadzi dalsze ulepszenia współbieżności z kolekcjami lambdas / równoległymi.
Inną rzeczą, na którą należy poważnie spojrzeć, są alternatywne sposoby radzenia sobie z współbieżnością. Mówiąc wprost, podejście Java do blokowania obiektów podlegających mutacji zawsze będzie podatne na błędy, bez względu na to, jak bardzo interfejsy API zostaną ulepszone. Dlatego zalecam przyjrzenie się modelowi aktorskiemu Scali i STM Clojure'a jako alternatywnym sposobom radzenia sobie z problemami współbieżności przy jednoczesnym zachowaniu interoperacyjności z Javą.
[ostrzeżenie -> autoreklama] Więc naturalnie polecę naszą nadchodzącą książkę, The Well-Grounded Java Developer , która obejmuje wszystkie rzeczy, o których wspomniałem powyżej: -). [/ warning]
Aby nie zapomnieć, Groovy ma również wysoce zalecaną bibliotekę Gpars, ale nie korzystałem z niej osobiście.
źródło
Język programowania D zapewnia dwa paradygmaty programowania współbieżnego, które mają swoje zastosowania i są dość interesujące.
std.concurrency zapewnia przekazywanie wiadomości bez domyślnego udostępniania pamięci. Wszystkie globalne i statyczne zmienne w D są domyślnie lokalne dla wątków
spawn
isend
nie pozwalają na wysyłanie wiadomości zawierających zmienną pośrednią wskazówkę. Ograniczone udostępnianie można uzyskać za pomocąshared
słowa kluczowego, co pociąga za sobą dodatkowe sprawdzenie przez system typów. Poza bezpiecznym dialektem języka możesz wymusić klasyczne zmienne globalne / wspólne w stylu C / Java za pomocą__gshared
słowa kluczowego, ale wszystkie zakłady są wyłączone w zakresie bezpieczeństwa wyścigu. Model ten został szczegółowo opisany w wolnym rozdziale książki Andrei Alexandresu „The D Programming Language”.równoległość std jest mniej bezpieczna, ale pod pewnymi względami bardziej elastyczna niż współbieżność std. i jest specjalnie dostosowana do danych wielordzeniowych i równoległości zadań w celu zwiększenia przepustowości przetwarzania danych zamiast współbieżności ogólnej. Posiada równoległą pętlę foreach, asynchroniczne wywołania funkcji, równoległe redukcje itp. Zapewnia mechanizmy ułatwiające pisanie kodu bezpiecznego dla wyścigu, ale nadal wymaga to pewnej dyscypliny.
Dokładniejszą dyskusję na temat dwóch głównych paradygmatów wielowątkowości w D można znaleźć w moim ostatnim artykule na ten temat.
źródło
Zdecydowanie sugeruję, abyś poszedł i spojrzał na Clojure
Podejście do współbieżności jest bardzo nowatorskie i moim zdaniem znaczny postęp w stosunku do tego, co widzisz w Javie i większości innych języków. Niektóre kluczowe punkty:
Proponuję obejrzeć ten film jako wprowadzenie
źródło
Spójrz na język Scala, który rozszerza Javę i działa na JVM. Pożycza pojęcie „aktorów” od Erlanga i daje dobre możliwości radzenia sobie z awariami współbieżności.
źródło
Jeśli chcesz przenieść go na zupełnie nowy poziom, możesz przyjrzeć się programowaniu w CUDA .
Pozwala to rozdzielić algorytmy na setki rdzeni przetwarzających na karcie graficznej, a nie na kilka głównych rdzeni procesora. Istnieją nawet powiązania językowe, które najwyraźniej względnie ułatwiają przyspieszenie języków wysokiego poziomu, takich jak python, przy użyciu technik GPGPU .
źródło
Programowanie współbieżności w JVM: Mastering Synchronization, STM i Actors omawia współbieżne programowanie w Scali, Clojure, JRuby i Groovy.
Zrozumiesz różne podejścia do współbieżności.
Gdzie jest twój uśmiech?
źródło