Implementacja wątków w programie jest trudna, tak, jednak dlaczego niektórzy ludzie ich nie implementują, nawet jeśli jest to oczywiste.
Przykład: program musi załadować zestaw danych z bazy danych, należy nawiązać połączenie i pobrać dane z bazy danych w wątku roboczym, a następnie załadować je do GUI, pozostawiając wątek GUI responsywny dla użytkownika .
Ale nie, rozmawiałem z ludźmi, którzy wydają się myśleć, że nici są złe i złe, a co innego i należy ich unikać za wszelką cenę. Słyszałem nawet, że jakiś instruktor klasowy odradzał stosowanie wątków i dlatego nie chciał obejmować ich użycia. CO???
Ponieważ sprzęt przechodzi w procesory wielordzeniowe, myślę, że musimy lepiej rozumieć wątki i nie bać się ich używać. Osobiście uważam to za fascynujący temat.
Więc co słyszałeś o wątkach, które są fałszywe?
źródło
Odpowiedzi:
Gwintowanie jest trudne
Pewnie. To może być. Jednak ludzie mają ten pomysł w głowie, że jest tak trudny, że nie zawracają sobie głowy próbą jego zrozumienia.
To nie tak, że to niemożliwe.
źródło
await
/ słowomasync
kluczowym :)To nie jest część wątków, która jest trudna, ale potrzeba synchronizacji i wszystko inne, co wiąże się z używaniem wątków. W przykładzie GUI, jak powiedzieć głównemu wątkowi, że zestaw danych jest gotowy do dostępu? Czy przekazujesz całą serię oddzwaniania? Czy rozpraszasz całą masę zmiennych kontrolnych w całym kodzie? W niektórych modelach GUI, np. Silverlight, istnieje coś zwanego powinowactwem do wątku, co oznacza, że nie masz dostępu do elementów GUI siedzących w głównym wątku z innych wątków, więc musisz zejść z drogi, aby główny wątek wiedział, że pewne informacje to gotowy do dalszego przetwarzania.
Naprawdę nie słyszałem żadnych fałszywych rzeczy na temat wątków. Właśnie przeczytałem całą masę analiz przypadków sytuacyjnych na temat synchronizacji jako dziwki, gdy używany algorytm nie jest z natury równoległy.
źródło
Wątek rozwiązuje wszystkie problemy
Jeśli masz problemy z wydajnością należy nie wskoczyć do gwintowania.
Nici są lekkie
Nici są lekkie w dziesiątkach i dwudziestych. Odradzanie tysięcy wątków nie jest.
Wątek jest prosty [Java]
Łatwo jest tworzyć wątki, co nie znaczy, że z tego skorzystasz.
źródło
W końcu stracisz wszelkie zyski z wątków, ponieważ naprawianie szalonych błędów, które pojawią się w wyniku korzystania z niektórych bibliotek / funkcji, które nie są bezpieczne dla wątków (czego nie byłeś świadomy), będzie wymagało nadmiernej synchronizacji.
Masz znacznie większe prawdopodobieństwo napotkania błędu, którego nie będziesz w stanie naprawić, jeśli użyjesz wątków, a kiedy nie.
źródło
Podsumowując punktowo, dlaczego wątki są trudne w użyciu: -
Rzeczy 1) Potrzebujesz synchronizacji i ostrożnych decyzji projektowych o tym, co i kiedy zablokować
2) Brak kontroli przepływu czasu wykonywania
3) Trudne debugowanie
4) (Bardzo niewiele razy) kompatybilność platformy: - Biblioteki istnieją, aby się tym zająć
Fałszywe rzeczy: -
1) mylące koncepcje funkcji bezpiecznego wątku i ponownego wprowadzania danych
2) wątki wyglądają dobrze na papierze, ale są bardzo trudne do wdrożenia
źródło
Jeśli nie chcesz pisać testów dla swojego kodu, nie używaj wątków.
Wątki nie są przeznaczone dla typowego programisty „kopiuj i wklej”, który nie rozumie podstawowych zasad systemu operacyjnego i architektury komputera. Ponieważ 90% programistów zna tylko Javę, tak naprawdę to nie ludzie powinni używać wątków. Java sprawia, że wątki są „łatwe”, ale widziałem wielu programistów, którzy po prostu myślą, że jeśli użyją struktur zsynchronizowanych, ich kod będzie działał w wątkach… uhm nie.
To powiedziawszy, każdy musi gdzieś zacząć, po prostu nie rób pierwszego wątku, modernizując serwer produkcyjny Twojej firmy.
źródło
Nie widzę, aby ta sytuacja wymagała użycia wątków z co najmniej 4 powodów:
Pobieranie danych powinno być bardzo szybkie.
W wielu aplikacjach z linii biznesowej użytkownik nie ma nic wspólnego z aplikacją w ciągu 1 sekundy lub dwóch czeka na wynik. Ponadto użytkownik będzie musiał poczekać, aż dane wrócą w jakikolwiek sposób, aby ukończyć żądane zadanie. Z drugiej strony zapytanie można zakodować inteligentnie, tak aby pobierało tylko stronę pełną informacji na raz, a inne techniki optymalizacji mogłyby pomóc w czasie odpowiedzi.
W interfejsach internetowych można uaktywnić łącza dotyczące modelu wątków.
Wątki zwiększają złożoność, jak przyznajesz, niektórzy programiści mogą nie być w stanie dodać funkcji lub debugować złożonego kodu.
Moja opinia brzmi: używaj wątków, gdy musisz, ponieważ łatwość konserwacji i niezawodność oprogramowania jest ważniejsza dla organizacji niż elegancja kodu.
źródło