Rejestracja
Uczestnik
Rejestracja zakończona: 31.10.2020 23:59680,00 PLN + VAT
836,40 PLN brutto
zakończona
Opis wydarzenia
Zapraszamy na szkolenie online z Jarkiem Pałką!
Wątki i współbieżność budzą w programistach Java strach. Gdy pojawia się potrzeba wykorzystania tych mechanizmów, sięgamy po rozwiązania operujące na wyższym poziomie abstrakcji.
Sięgamy po Akka, RxJava, Reactor. Czy tak musi być? Czy Java nie dostarcza mechanizmów pracy z wątkami i tworzenia wydajnego i czytelnego kodu współbieżnego? Podczas tego szkolenia odpowiemy na to pytanie, poznając bliżej "concurrency primitives" dostępne w Java SDK, czyli pakiet java.util.concurrent. Nauczymy się jak z podstawowych elementów, takich jak kolejki, blokady, czy bariery, budować czytelne rozwiązania oraz jak analizować ich wydajność i jak je testować.
Szkolenie przeznaczone jest dla osób, które mają już doświadczenie z Java 8 (choć samo szkolenie będzie wykorzystać Java 11). Znajomość tematów wątków i współbieżności nie jest wymagana.
Jak będzie wyglądać szkolenie online?
Spotykamy się raz w tygodniu, w soboty o godzinie 20.00. Podczas 90 minutowego spotkania będziemy omawiać prace domowe oraz tematy kolejnej lekcji. Po każdym spotkaniu dostaniecie zadania domowe w postaci projektu na GitHub, a Jarek będzie cały czas dostępny pod mailem i na Slacku.
Terminy spotkań:
Wątki i współbieżność budzą w programistach Java strach. Gdy pojawia się potrzeba wykorzystania tych mechanizmów, sięgamy po rozwiązania operujące na wyższym poziomie abstrakcji.
Sięgamy po Akka, RxJava, Reactor. Czy tak musi być? Czy Java nie dostarcza mechanizmów pracy z wątkami i tworzenia wydajnego i czytelnego kodu współbieżnego? Podczas tego szkolenia odpowiemy na to pytanie, poznając bliżej "concurrency primitives" dostępne w Java SDK, czyli pakiet java.util.concurrent. Nauczymy się jak z podstawowych elementów, takich jak kolejki, blokady, czy bariery, budować czytelne rozwiązania oraz jak analizować ich wydajność i jak je testować.
Szkolenie przeznaczone jest dla osób, które mają już doświadczenie z Java 8 (choć samo szkolenie będzie wykorzystać Java 11). Znajomość tematów wątków i współbieżności nie jest wymagana.
Jak będzie wyglądać szkolenie online?
Spotykamy się raz w tygodniu, w soboty o godzinie 20.00. Podczas 90 minutowego spotkania będziemy omawiać prace domowe oraz tematy kolejnej lekcji. Po każdym spotkaniu dostaniecie zadania domowe w postaci projektu na GitHub, a Jarek będzie cały czas dostępny pod mailem i na Slacku.
Terminy spotkań:
- 6 lutego
- 13 lutego
- 20 lutego
- 27 lutego
- 6 marca
Po rejestracji na szkolenie każdy uczestnik otrzyma zaproszenie do kalendarza i wszystkie potrzebne narzędzia.
Poniżej dokładny plan kolejnych lekcji wraz z zadaniami domowymi.
Lekcja 1. Czym jest współbieżność?
• Współbieżny czy równoległy? Czy kod współbieżny jest jednocześnie równoległy?
• Algorytmy nieblokujące i ich gwarancje ("wait,lock&obstruction freedom")
• Dlaczego potrzebujemy współbieżności i dlaczego CPU nie może tym sam zająć
• Zarys konstrukcji współczesnych systemów wieloprocesorowych i tego konsekwencje
• Granice współbieżność (prawo Amdahla i uniwersalne prawo skalowalności)
• Modele spójności ( "strict, sequential, casual & eventual consistency" )
• Dlaczego Total Store Order nie rozwiązuje wszystkich problemów
• Java Memory Model na ratunek, wprowadzenie do
◦ Happens-Before
◦ Synchronizes-With
◦ As-If-Serial
◦ Release-Before-Acquire
• Szybkie wprowadzenie do Java Micro Benchmark Harness
Praca domowa: synchronized kontra reentrant lock kontra atomic long
Zadaniem jest porównanie wydajności wybranych technik pisania współbieżnego kodu.
Lekcja 2. Zamki do drzwi i broń atomowa
• Wątki i specyfikacja POSIX
• Wątki i Java Virtual Machine
◦ "fat locks vs sping locks"
◦ "adaptive locking"
◦ "biased locking"
◦ "lock coarsenning i lock ellision"
• "mutual exclusion" na sterydach, czyli powitajmy ReentrantLock
◦ ReadWriteReentrantLock i słów kilka o "lock downgradin"
◦ StampedLock i "starving threads"
• Zmienne atomowe i praktyczne zastosowania
• Czym jest instrukcja XCMPCHG i dlaczego jest tak ważna w kontekście "lock free programming"
• Problem ABA i dostępne środki zaradcze (AtomicMarkableRefrence i AtomicStampedReference)
Praca domowa: Implementacja nie blokujących kolejek o ograniczonym i nieograniczonym rozmiarze.
Lekcja 3. Kolejki rządzą światem
• Podstawowe typy kolejek
• Omówienie dostępnych w JDK implementacji
◦ "blocking" oraz "non blocking"
◦ "bounded" oraz "unbounded"
◦ "transfer queue"
◦ "synchronous queue"
• Wracamy do Java Memory Model by jeszcze raz praktycznie pokazać jego działanie na przykładzie kolejek
• jcstress, wprowadzanie do weryfikacji poprawności naszego kodu współbieżnego
Praca domowa: Implementujemy Erlang’a (lub Akka, jak kto woli) czyli model aktorów.
Lekcja 4. Bariery, lasery i inne bajery
• Dostępne w JDK implementacje barrier
◦ CountDownLatch
◦ CyclicBarrier
◦ Exchanger
◦ Semaphor
◦ Phaser
• Praktyczne zastosowanie barier na przykładzie implementacji "map-reduce"
Praca domowa: Implementujemy pulę obiektów.
Lekcja 5: Pracownicy biurowi i czarna materia
• Dostępne w JDK implementacje puli wątków:
◦ "single thread"
◦ "fixed size"
◦ "cached"
◦ "scheduled"
◦ "job-stealing"
• Czym jest "abort policy"
• Jak skonfigurować czas życia wątku w puli i inne sposoby optymalizacji
• "ForkJoin" w JDK, dobrodziejstwo czy zło w czystej postaci?
◦ Jakiej klasy problemy można rozwiązać z wykorzystaniem ForkJoin
◦ Kiedy korzystamy z RecursiveAction a kiedy z RecursiveTask?
◦ Czy można zagłodzić ForkJoin i jak może nas przed tym ustrzec ManagedBlock
◦ Wykorzystanie ForkJoin w CompletableFuture, Phaser i "parallel streams"
◦ Czym jest CountedCompleter i praktyczne zastosowania
Jeśli pojawią się jakieś pytania to prosimy kierować je pod adres: [email protected]
Termin i miejsce
Rozpoczęcie:
06.02.2021 10:00
Zakończenie:
06.03.2021 10:00
Strona rejestracji:
https://2020-java-concurrency-primitives-nov.konfeo.com