C# – Współbieżność

Loading Likes...

Tworząc różnego rodzaju aplikacje (np. WPF, Windows Forms), prawdopodobnie wiele razy spotykałeś się z problemem chwilowego “zamarzania” aplikacji, podczas gdy ta wykonywała intensywne obliczenia. Aby napisać aplikację, która będzie pozbawiona tego zachowania musisz zaznajomić się z pojęciem współbieżności i asynchroniczności.

Jak się domyślasz, skupie się w tym wpisie głównie na współbieżności, a o asynchroniczności powstanie osobny wpis.

 

Co daje nam współbieżność?

 

Efekt chwilowego zamarzania aplikacji to tylko jeden z wielu problemów, które rozwiązuje współbieżność. Jest wiele scenariuszy, przy których wykorzystujemy współbieżność, powinieś zapamiętać chociaż te poniżej, gdyż jest to przydatna wiedza (np. podczas rozmowy o pracę 🙂 ).

Responsywny interfejs użytkownika – po kliknięciu w przycisk proces wykonuje się w tle.

Jednoczesne przetwarzanie żądań – serwis internetowy obsługuje wielu klientów jednocześnie, a nie każdego z osobna.

Programowanie równoległe – niektóre programy, przetwarzające bardzo dużą liczbę informacji wymagają rozłożenia obciązenia na wiele wątków, w celu zdecydowanego przyspieszenia wykonywanych operacji.

 

Jak kod realizowany jest współbieżnie?

 

Mechanizm umożliwiający programowi na równoległe wykonywanie kodu nazywany jest wielowątkowością. I tu pojawia się pierwsze fundamentalne pojęcie czyli “wątek“.

 

Co to jest wątek?

 

Wątek jest po prostu osobną niezależną scieżką wykonywania kodu. Możemy tworzyć wiele wątków, ponieważ są one tworzone w ramach jednego procesu (Jeden proces może zawierać wiele wątków).

W praktyce: tworzymy nowy wątek (z delegatem jakiejś metody – o tym wkrótce, zobaczysz przykład), wywołujemy metodę Start() i wątek zaczyna realizować kod, który znajdował się we wskazanej przez nas metodzie – proste. Dzięki temu, nasz kod realizowany jest już współbieżnie,a metoda wskazana przez nas nie blokuje realizacji głównego kodu.

Aby utworzyć wątek wystarczy napisać:

Powyższe wątki zostały utworzone, natomiast nic poza tym. Teraz, aby nasze wątki zaczęły pracę, należy wywołać na nich metodę Start().

Otrzymamy

Przykład 1. Aby lepiej zaobserwować, że kod faktycznie wywołuje się równolegle zmodyfikujmy nasz kod.

Otrzymamy:

You May Also Like

About the Author: Jerzy Kołakowski

Pasjonat informatyki, bloger. Full-stack Developer Technologie:
  • ASP.NET MVC
  • ASP.NET CORE
  • Angular 2+

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Facebook