Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałBratumił Kozica Został zmieniony 10 lat temu
1
Architektura aplikacji wielowątkowych Jakub Binkowski
2
Lead.NET Developer 2008-2011 jakub@binkowski.com.pl
3
Cel prezentacji Alternatywne podejście przy projektowaniu aplikacji wielowątkowych Częste błędy
5
Jak działa giełda? SprzedającyKupującyProdukty
6
Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena IlośćOsoba
7
Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena Jan50 szt.100,00 zł CenaIlośćOsoba
8
Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena Jan50 szt.100,00 zł Ewa100 szt.95,00 zł CenaIlośćOsoba
9
Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena Jan50 szt.100,00 zł Ewa100 szt.95,00 zł CenaIlośćOsoba 110,00 zł20 szt.Jerzy
10
Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena Jan50 szt.100,00 zł Ewa100 szt.95,00 zł CenaIlośćOsoba 100,00 zł30 szt.Anna 110,00 zł20 szt.Jerzy
11
Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena Jan50 szt.100,00 zł Ewa100 szt.95,00 zł CenaIlośćOsoba 100,00 zł30 szt.Anna 110,00 zł20 szt.Jerzy Transakcja Anna sprzedaje Janowi 30 szt. w cenie 100,00 zł/szt.
12
Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena Jan20 szt.100,00 zł Ewa100 szt.95,00 zł CenaIlośćOsoba 110,00 zł20 szt.Jerzy
13
Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena Jan20 szt.100,00 zł Ewa100 szt.95,00 zł CenaIlośćOsoba 90,00 zł200 szt.Zenon 110,00 zł20 szt.Jerzy
14
Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena Jan20 szt.100,00 zł Ewa100 szt.95,00 zł CenaIlośćOsoba 90,00 zł200 szt.Zenon 110,00 zł20 szt.Jerzy Transakcja Zenon sprzedaje Janowi 20 szt. w cenie 100,00 zł/szt.
15
Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena Ewa100 szt.95,00 zł CenaIlośćOsoba 90,00 zł180 szt.Zenon 110,00 zł20 szt.Jerzy
16
Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena Ewa100 szt.95,00 zł CenaIlośćOsoba 90,00 zł180 szt.Zenon 110,00 zł20 szt.Jerzy Transakcja Zenon sprzedaje Ewie 100 szt. w cenie 95,00 zł/szt.
17
Jak działa rynek? Oferty zakupu Oferty sprzedaży OsobaIlośćCena IlośćOsoba 90,00 zł80 szt.Zenon 110,00 zł20 szt.Jerzy
18
Architektura z lotu ptaka Silnik rynku Oferty sprzedaży Oferty zakupu Transakcje Aktualizacje ofert
19
Przetworzenie oferty 1. Odebranie wiadomości 2. Audyt (zapis na dysk) 3. Deserializacja (byte[] object) 4. Umieszczenie na rynku Silnik rynku Oferty sprzedaży Oferty zakupu
20
Przetworzenie transakcji 1. Wygenerowanie przez rynek 2. Serializacja (object byte[]) 3. Audyt (zapisanie na dysk) 4. Wysłanie do strony kupującej i sprzedającej Silnik rynku Transakcje
21
Przetworzenie aktualizacji oferty 1. Wygenerowanie przez rynek 2. Serializacja (object byte[]) 3. Audyt (zapisanie na dysk) 4. Wysłanie do składającego ofertę Silnik rynku Aktualizacje ofert
22
Wymagania Niezawodność / bezbłędność Wysoka testowalność rozwiązania Pełny audyt Możliwość odtworzenia dowolnej sytuacji Wysoka wydajność Optymalizacja kodu
23
Architektura standardowa Przychodząca wiadomość = 1 wątek Wątki brane z puli ( ThreadPool ) Pula wątków w.NET: Zbiór wątków dostępnych dla aplikacji Minimalna ilość wątków = ilość procesorów logicznych Maksymalna – zależy od środowiska
24
Obsługa wiadomości przychodzących Wiadomości przychodzące Dedykowany wątek Pula wątków
25
Składanie oferty
26
Zdarzenia na rynku
27
Podsumowanie
28
Demo: Wielowątkowo vs jednowątkowo
29
W czym jest problem? lock Serializacja Audyt
30
W czym jest problem? lock Tylko tutaj potrzebny jest lock!
31
lock leak lock (sync) { //... _eventConsumer.ProcessOfferUpdated(/*...*/); //... } lock (sync) { //... var handler = OfferUpdated; if (handler != null) { handler(this, EventArgs.Empty); } //... } Przekazanie kontroli do zewnętrznego kodu
32
lock leak - konsekwencje Utrata wydajności Możliwe deadlocki Możliwe zapchanie się puli wątków OutOfMemoryException
33
lock leak - jak uniknąć? bool offerUpdated = false; lock (sync) { //... offerUpdated = true; //... } if (offerUpdated) _eventConsumer.ProcessOfferUpdated(/*..*/); Uwaga! Wywoływanie powiadomień za sekcją krytyczną może wpłynąć na logikę działania aplikacji.
34
Demo: Unikanie lock leak
35
Czy spełniliśmy wymagania? Niezawodność / bezbłędność Wysoka testowalność rozwiązania Czy nasz kod można dobrze przetestować? Pełny audyt Możliwość odtworzenia dowolnej sytuacji Czy wykonanie nie jest losowe? Wysoka wydajność Optymalizacja kodu Czy nie da się szybciej?
36
Co zrobić, aby spełnić te wymagania?
37
Architektura oparta o kolejki Wysokowydajne kolejki wielowątkowe
38
Architektura oparta o kolejki Wątki wykonujące kolejne operacje
39
Architektura oparta o kolejki Wiadomości przychodzące AudytDeserializacja Przetwarzanie przez rynek Serializacja Audyt Wiadomości wychodzące
40
Jak to zrealizować (w.NET 4)? ConcurrentQueue wielowątkowo bezpieczna kolejka wysoko zoptymalizowana BlockingCollection opakowanie na kolekcje wspiera scenariusz producent-konsument pozwala na blokowanie odczytu (kolekcja pusta) pozwala na blokowanie zapisu (kolekcja pełna)
41
BlockingCollection - przykład Deklaracja: var queue = new BlockingCollection (100); Maksymalna pojemność kolekcji
42
BlockingCollection - przykład Producent: queue.Add(1); queue.Add(2); queue.Add(3); queue.CompleteAdding(); Wstawianie elementów Zakończenie dodawania
43
BlockingCollection - przykład Konsument: var consumer = queue.GetConsumingEnumerable(); foreach (var number in consumer) { Console.WriteLine(number); } Enumeracja jak przy zwykłej kolekcji Oczekiwanie na elementy (przy pustej kolekcji)
44
Demo: Czy kolejki się sprawdzą?
45
Architektura oparta o kolejki Zalety Eliminacja wielowątkowości Wiele wątków, ale kolejki zajmują się synchronizacją Kod łatwy do testowania Przewidywalność zachowania Powtórzenie danych wejściowych zawsze da taki sam rezultat Wyższa wydajność Mniej wątków = mniejsza konieczność synchronizacji Możliwość grupowego przetwarzania
46
Architektura oparta o kolejki Zalety Bardziej przejrzysty design Jasno określone wątki aplikacji Dobrze zdefiniowane punkty interakcji pomiędzy wątkami (kolejki) Pełny wgląd w aktualny stan aplikacji Ilość elementów w kolejce Łatwa lokalizacja wąskich gardeł
47
Architektura oparta o kolejki Wady Trudniejsze debugowanie Bardziej pracochłonna Wymaga dokumentacji
48
Gdzie taka architektura się sprawdzi? Aplikacje: przetwarzające niewiele rodzajów zdarzeń o relatywnie prostej logice mocno obciążone (wymagana wysoka wydajność) Na przykład: systemy giełdowe systemy agregujące/przetwarzające dane aplikacje dostarczające dane na żywo
49
Podsumowanie Klasyczne podejście operacja = wątek nie zawsze najwydajniejsze Uwaga na wywołania zewnętrzne wewnątrz lock! Kolejki mogą rozwiązać problem synchronizacji pomiędzy wątkami
50
Dziękuję za uwagę. Pytania?
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.