Szkolenie: Go * zaawansowana współbieżność
Szkolenie Go * zaawansowana współbieżność to praktyczny kurs, który uczy projektowania i diagnozowania skomplikowanych systemów współbieżnych w języku Go, w oparciu o goroutines, kanały, prymitywy synchronizacji, model pamięci oraz zaawansowane wzorce projektowe
- Trenerzy praktycy
- Kameralne grupy
Czas trwania szkolenia:2 dni (16h)
Kod kursu:GO/CONCURRENCY
Go * zaawansowana współbieżność
Cele szkolenia
Szkolenie przygotowuje do samodzielnego projektowania i implementowania zaawansowanych wzorców współbieżności Go, w tym pipelines, fan-in/fan-out oraz structured concurrency w systemach produkcyjnych
Szkolenie uczy diagnostyki i debugowania race condition, deadlocków oraz problemów wydajnościowych z użyciem narzędzi takich jak pprof, trace i race detector w aplikacjach concurrency Go
Szkolenie pokazuje, jak łączyć structured concurrency, model pamięci Go oraz prymitywy sync i sync/atomic w skalowalnych rozwiązaniach backendowych
Dla kogo?
Programistów z praktyczną znajomością języka Go, budujących systemy o wysokiej współbieżności i dużym przepływie żądań
Zespołów tworzących brokery wiadomości, stream processory, schedulery oraz inne systemy rozproszone wymagające precyzyjnej kontroli współbieżności
Efekty kształcenia
Uczestnik analizuje działanie schedulera oraz model pamięci Go i wykorzystuje tę wiedzę do optymalizacji wydajności aplikacji
Uczestnik implementuje zaawansowane wzorce kanałów Go, takie jak pipelines, fan-out, fan-in oraz mechanizmy backpressure w systemach przetwarzania danych
Uczestnik wykorzystuje prymitywy synchronizacji Go w sposób bezpieczny i wydajny w środowisku produkcyjnym
Uczestnik wykrywa i eliminuje race condition oraz deadlocki z użyciem race detectora, pprof i narzędzi do profilowania współbieżności
Uczestnik projektuje mechanizmy graceful shutdown oraz structured concurrency w aplikacjach i mikroserwisach
Uczestnik stosuje zaawansowane wzorce architektoniczne, takie jak actor model, lock-free oraz systemy nadzoru w rozwiązaniach Go
Wymagania
Praktyczna umiejętność programowania w języku Go, znajomość goroutines, kanałów oraz interfejsu context.Context
W cenie otrzymasz:
Materiały szkoleniowe
Certyfikat ukończenia szkolenia
W przypadku szkolenia w trybie stacjonarnym zapewnimy Ci również lunch oraz sprzęt niezbędny do nauki
Program szkolenia
Scheduler i model pamięci w Go
Jak działa scheduler w modelu M:N i jego trzy główne elementy: goroutine (G), wątek systemu operacyjnego (M) oraz kontekst wykonania (P). Rola zmiennej GOMAXPROCS w sterowaniu równoległością
Wywłaszczanie goroutine przez środowisko uruchomieniowe, etapy życia goroutine, sterowanie zachowaniem przez zmienną GODEBUG
Model pamięci w Go: relacja „dzieje się przed", widoczność zapisów między goroutinami, bariery pamięci
Ile naprawdę kosztuje przełączanie goroutine, jak działa planowanie i co się dzieje, gdy goroutine wykonuje operację blokującą
Diagnostyka schedulera: śledzenie wykonania, opcja GODEBUG=schedtrace oraz pakiet runtime/metrics
Analiza działania programu przy pomocy narzędzia go tool trace i wbudowanego mechanizmu śledzenia
Zaawansowane wzorce pracy z kanałami
Wieloetapowe potoki przetwarzania i ich składanie z funkcji zwracających kanały
Rozdzielanie pracy na wiele goroutine i scalanie wyników z powrotem
Radzenie sobie z sytuacją, gdy producent jest szybszy od konsumenta: bufory oraz strategie odrzucania najstarszych elementów, najnowszych elementów lub blokowania producenta
Rozsyłanie wiadomości do wielu odbiorców oraz wzorzec publikuj-subskrybuj z użyciem select i listy kanałów
Kanał sygnalizujący zakończenie pracy, anulowanie operacji i przekazywanie tych sygnałów między warstwami programu
Timer, Ticker i kanały czasowe w stabilnych pętlach obsługujących zdarzenia
Jak testować kod oparty na kanałach i jak budować scenariusze, które dają powtarzalne wyniki
Synchronizacja i mechanizmy niskopoziomowe
Praktyczne zastosowanie typów sync.Mutex, sync.RWMutex, sync.Once i sync.Cond
sync.Pool jako sposób na zmniejszenie liczby alokacji oraz jego ograniczenia
sync.Map i kiedy warto sięgnąć po niego zamiast zwykłej mapy chronionej muteksem
Pakiet sync/atomic oraz typy atomowe
Biblioteka errgroup i golang.org/x/sync/semaphore do kontrolowania liczby równolegle wykonywanych zadań
Współbieżność strukturalna: propozycje języka oraz wzorce stosowane obecnie w środowisku Go
Pakiet context jako sposób przekazywania sygnału anulowania i terminu wykonania zadania
Wyścigi, zakleszczenia i ich diagnostyka
Wbudowany wykrywacz wyścigów, jego typowe fałszywe wskazania i jak z nim pracować
Klasyczne pułapki: zapis bez zabezpieczenia, dzielona mapa między goroutinami, problemy przy iterowaniu po slajsie
Zakleszczenia: zagnieżdżone muteksy, kanały, których nikt nie zamyka, instrukcja select bez gałęzi domyślnej
Sytuacje, w których goroutine ciągle pracują, ale nie robią postępu, oraz takie, gdzie część z nich nigdy nie dostaje pracy. Sposoby zapobiegania
Profilowanie programów współbieżnych: profil muteksów, profil blokowań, profil goroutine
Narzędzia: debuger Delve, pakiet pprof, wykresy płomieniowe, ciągłe profilowanie z Pyroscope lub Parca
Testy losowe oraz testy obciążeniowe dla systemów wielowątkowych
Wzorce architektoniczne dla współbieżności
Pula procesów roboczych i pule, których rozmiar zmienia się w czasie pracy
Model aktorów w Go: biblioteki protoactor-go i hollywood oraz to, co Go zaczerpnęło z języka Erlang
Wzorce bez blokad: RCU, kolejki bez blokad, wskaźniki zagrożenia
Nadzorca procesów i drzewa nadzoru, automatyczne wznawianie pracy po błędach
Jak prawidłowo zatrzymać działający program: serwery HTTP, gRPC oraz odbiorcy z kolejek
Sterowanie długo działającymi zadaniami i strumieniowe przetwarzanie danych z kontrolą tempa
Wybrane opinie
Przeczytaj pozytywne opinie pochodzące z ankiet satysfakcji z naszych szkoleń wypełnianych wyłącznie przez ich uczestników po realizacji usługi

