• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wielowątkowości w c#

VPS Starter Arubacloud
+1 głos
546 wizyt
pytanie zadane 11 kwietnia 2021 w C# przez tomasz12345 Użytkownik (750 p.)
Czym różni się asynchronicznosc od wielowątkowości w jezyku c#?

Natrafiam na wiele tutoriali /artykułów ktore je porównują jednak w każdym materiale o asynchronicznosci jest np. Thread.sleep uzyte w kodzie.... Mógłby mi Ktos napisac na czym to polega?... ( async, await, thread itp) Mysle ze wielu początkujących ma z tym problem

3 odpowiedzi

0 głosów
odpowiedź 11 kwietnia 2021 przez marcin99b Szeryf (81,480 p.)
wybrane 11 kwietnia 2021 przez tomasz12345
 
Najlepsza
Wielowątkowość to po prostu używanie wielu wątków

Asynchroniczność to robienie w tle rzeczy, które mogą być robione w tle, przez co aktualny wątek może skupić się na czymś innym
Przykładowo
Chcesz zrobić śniadanie - jakąś kanapke i herbate, podgrzewając wode na herbate nie będziesz patrzył na czajnik i czekał, tylko włączysz go żeby działał "w tle" i skupisz się na robieniu czegoś innego
Przez co zaoszczędzisz czas

Przykład bardziej z IT to może być np ładowanie danych w tle, nie chcesz blokować całej aplikacji w oczekiwaniu na pobranie jakichś danych albo wykonywanie złożonych obliczeń
Część aplikacji będzie obsługiwać żądania użytkownika albo będzie robić inne rzeczy które zlecił, a jakiś wątek w tle będzie obsługiwać pobieranie danych

Potrafi to bardzo przyśpieszyć aplikacje w niektórych sytuacjach
Ale nie we wszystkich - utrzymanie każdego wątku wymaga pewnej mocy
łatwo to sobie wyobrazić na przykładzie kierownika i pracowników, im jest więcej pracowników tym teoretycznie szybciej coś będzie zrobione, ale też wtedy kierownik ma więcej pracy
może się okazać że będą lepsze efekty jak coś będzie robił jeden pracownik, niż np 2 pracowników + kierownik

To tak na szybko, w internecie masz mnóstwo rozbudowanych poradników do tego

https://stackoverflow.com/questions/34680985/what-is-the-difference-between-asynchronous-programming-and-multithreading/34681101
pierwszy wynik z google
komentarz 15 kwietnia 2021 przez tomasz12345 Użytkownik (750 p.)

rozumiem, analogia z pracownikami zatrudnionymi do jednego zadania jest jednak dla mnie nie jasna... załóżmy ze mamy 3 rzeczy do zrobienia i chcemy je zrobic asynchronicznie a potem wieolwątkowo : 1. wczytanie pliku z txt z dysku 2. wczytanie pliku txt z dysku 3. wczytanie zmiennej z bazy danych ...

wielowątkowo - rozumiem, każdy wątek działa osobno i wchodzi do rdzenia i przetwarza jednoczenie

asynchronicznie ? - pobiera jeden, pobiera drugi, pobiera trzeci z DB , ale przecież sie nie rodzieli..., niektóre grafiki np. ta na dole pokazują, że czasowo wyglada to podobnie... ja rozumiem, że to asynchronicznosc ma sens tylko proboje to zrozumiec....

 

Async vs Multithreaded

komentarz 15 kwietnia 2021 przez marcin99b Szeryf (81,480 p.)
Asynchroniczność to wykorzystanie wielowątkowości do akcji typu
"zacznij robić to, ale w międzyczasie zrób to"

np "rozpocznij pobieranie plików z 3 źródeł jednocześnie, i jak sie będą pobierać to wyświetlaj animacje mówiącą że jeszcze pobiera i zostało X czasu"
1
komentarz 15 kwietnia 2021 przez marcin99b Szeryf (81,480 p.)
Rozmawianie z ludźmi to fajny przykład synchroniczność vs asynchroniczność

Jak z kimś rozmawiasz na żywo, poświęcasz pełną uwagę tej osobie
Podobnie (przynajmniej ja) mam podczas rozmów przez telefon itp
Czyli robisz to synchronicznie
Zyskujesz na tym że w krótszym czasie przekażecie sobie wszystkie informacje i będziecie na sobie w pełni skupieni

A podczas pisania masz sytuacje asynchroniczną czyli
sprawdzasz co ktoś napisał, odpisujesz, idziesz zajmować się czymś innym
jak dostaniesz powiadomienie o nowej wiadomości sprawdzasz ją, odpisujesz i zajmujesz się czymś innym
w efekcie przekaz informacji będzie duużo wolniejszy bo w ciągu godziny rozmowy dowiesz sie tyle, co z rzeczywistej rozmowy 10 minutowej
ale za to przez większą elastyczność masz lepsze postępy w pracy albo w czymś w domu

kolejny element asynchroniczności to w pewnych kwestiach podejście na zasadzie "jak się zrobi to się zrobi, ważne żeby w ogóle sie zrobiło"
przy rozmowie synchronicznej (np głosowej) wymuszasz skupienie 2 osób i obecność o konkretnym czasie
w przypadku asynchronicznej możesz wysłać wiadomość tekstową w środku nocy bo akurat teraz masz czas i zamiast czekać aż ta osoba zauważy wiadomość i odpisze, możesz zająć się czymś innym

podsumowując
asynchroniczność to nie jest coś co jest dobre czasowo
czasami będzie wydajniejsze, czasami nie

czasami będzie mniej wydajne, ale będzie dawać większe możliwości
lepiej żeby np pobieranie danych z pliku w aplikacji okienkowej trwało troche dłużej niż jest to możliwe do zrobienia
ale żeby podczas tego użytkownik miał swobodną kontrolę nad resztą aplikacji, mógł odpalać inne akcje itd
niż żeby aplikacja była zablokowana do czasu pobrania wszystkich danych

możesz stworzyć przykładowo projekt WPF -> jeśli nie dodasz asynchroniczności to wszelkie operacje będą blokować dostęp do GUI
np coś się dłużej liczy - nic nie można zrobić
pobierasz jakieś dane - nic nie można zrobić
po przepisaniu na asynchroniczność nagle aplikacja działa dużo przyjemniej, można na niej pracować mimo że coś się dzieje w tle
+4 głosów
odpowiedź 12 kwietnia 2021 przez Siemił Mądrala (7,380 p.)

Dodam coś od siebie:

Współbieżność -> robienie wielu rzeczy w jednym czasie. 

Wielowątkowość -> Forma współbieżności w której korzysta się z wielu wątków wykonywania.

Programowanie asynchroniczne -> Forma współbieżności wykorzystuje obiekt typu 'Futur' (zwany obiektem odroczonym, lub obietnicą) lub wywołanie zwrotne w celu uniknięcia niepotrzebnych wątków. W .NET typami Future to 'Task' lub 'Task<TResult>'.

Programowanie reaktywne -> forma współbieżności. Opiera się na zdarzeniach asynchronicznych, czyli aplikacja reaguje na zdarzenia.

komentarz 12 kwietnia 2021 przez Wiciorny Ekspert (269,120 p.)
Cenna uwaga
komentarz 15 kwietnia 2021 przez tomasz12345 Użytkownik (750 p.)
edycja 15 kwietnia 2021 przez tomasz12345

@Siemił,
 ale jak to mozliwe, ze asynchronicznie robi coś ,, w tle ,, nie używając innych wątków?

Przeciez jeden rdzen moze obsluzyc tylko jeden wątek naraz... więc gdzie to ,, w tle ,, sie wykonuje?

 

ps moglbys zerknąc do mojego komentarza do odpowiedzi powyżej Twojej?

komentarz 15 kwietnia 2021 przez JakSky Stary wyjadacz (14,770 p.)
A kto powiedział, że nie używa innych wątków? Używa, ale tylko wtedy gdy zadania są skomplikowane. Gdy używasz Task.Run jest szansa, że wykona się w drugim wątku.
komentarz 15 kwietnia 2021 przez Wiciorny Ekspert (269,120 p.)

@tomasz12345,  operacje mogą być delegowane do zewnętrznego API :) ... nie działającego na wątku tworzonym przez Ciebie- lokalnie

0 głosów
odpowiedź 15 kwietnia 2021 przez JakSky Stary wyjadacz (14,770 p.)
Polecam przeczytać serię artykułów z tej strony; https://cezarywalenciuk.pl/blog/programing/asynchroniczny-c

Podobne pytania

+1 głos
1 odpowiedź 174 wizyt
0 głosów
0 odpowiedzi 118 wizyt
+1 głos
1 odpowiedź 283 wizyt
pytanie zadane 28 lutego 2020 w C# przez kubekszklany Gaduła (3,170 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...