Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Architektura aplikacji wielowątkowych Jakub Binkowski.

Podobne prezentacje


Prezentacja na temat: "Architektura aplikacji wielowątkowych Jakub Binkowski."— Zapis prezentacji:

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

4

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?


Pobierz ppt "Architektura aplikacji wielowątkowych Jakub Binkowski."

Podobne prezentacje


Reklamy Google