Wątek przeniesiony 2015-06-26 00:03 z Nietuzinkowe tematy przez Rev.

Jak skutecznie wykorzystywać wątki?

0

Dzień dobry.
Kusi mnie stworzenie aplikacji wielowątkowej. Jednak zastanawiam się, kiedy warto wątków używać, oraz jak?

Czy lepiej np stworzyć osobny wątek do np: Zapisywania moich obiektów do bazy danych (przy dużej ilości obiektów by nie blokować głównej pętli programu), czy może lepiej stosować do małych zadań? (Ktoś skończyć grać, i wypuszczam mały, krótki wątek który zapisze wynik meczu do bazy danych).

0

Zapisywania moich obiektów do bazy danych

Mało która (jakakolwiek?) baza danych obsługuje wielowątkowy insert.

Ktoś skończyć grać, i wypuszczam mały, krótki wątek który zapisze wynik meczu do bazy danych

To na pewno warto robić w osobnym wątku, natomiast taka z tego wtedy będzie aplikacja wielowątkowa, że wcale.

Lepiej już pobaw się np. w pisanie raytracera, tutaj można się bardziej popisać i lepiej widać efekty ;)

1

to tak nie działa - bo to jest podejście na zasadzie "mam klucz 15kę to teraz muszę znaleźć śrubkę, którą mógłbym tym kluczem pokręcić". To narzędzia i rozwiązania dobiera się do zadań. Wątki są niezbędne wszędzie tam, gdzie jest wymóg obsługi wielu żądań w tym samym czasie (wszelkie serwery BD, sieciowe (www, ftp), chaty, gry multiplayer) oraz tam, gdzie przewiduje się wykonywanie długich operacji, które nie są konieczne do normalnej pracy systemu (np. można w osobnym wątku uruchomić generowanie długiego raportu, jednocześnie umożliwiając userowi normalną pracę).

Wg mnie takie rzeczy jak zmiana danych w bazie zawsze powinna blokować UI po pierwsze po to aby user wiedział kiedy się skończy i nie grzebał w międzyczasie a po drugie po to żeby w razie niepowodzenia dać możliwość ponowienia akcji userowi (jeśli np. dodanie nowego kontrahenta po wypełnieniu 100 pól działo się w osobnym wątku to aby to miało sens należało by od razu zamknąć okno edycji i umożliwić dalszą pracę. Jeśli natomiast okno czekało by na zakończenie wątku to nie ma to sensu).

0

W mojej aplikacji nie ma UI. Wątki chcę po stronie serwera użyć (Głownie po to by nie blokować w tym czasu głównej pętli serwera, czekają na odpowiedź że zapytanie do bazy się zakończyło).

Głownie chciałem się dowiedzieć czy warto tworzyć nowy Thread dla zadania które potrwa np: 1/4 sekundy.

4

Raczej utworz pule watkow, i podsylaj jej zadania. A najlepiej nie tworz sam niczego, tylko wykorzystaj to co napisali madrzejsi ode mnie czy od ciebie - poczytaj o mozliwosciach twojej platformy. Piszesz o Thread, wiec zakladam ze piszesz w Javie - poczytaj wiec o Executorach.

0

Piszesz serwer czyli masz na myśli aplikacje webową(bo co innego możesz chcieć) - robisz tak i jesteś szczęśliwy http://stackoverflow.com/questions/17167020/when-to-use-spring-async-vs-callable-controller-async-controller-servlet-3

ednak zastanawiam się, kiedy warto wątków używać, oraz jak?

https://today.java.net/article/2011/06/14/method-reducing-contention-and-overhead-worker-queues-multithreaded-java-applications

0

Otagowałeś to #python, więc w nim sprawa wygląda tak, że jest GIL, czyli globalny lock na interpreter i jeśli chcesz rozsądną wielowątkowość, to raczej biblioteka multiprocessing, która operuje na procesach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1