Do tej pory nie miałem styczności z wielowątkowością w javie a chciałbym ją ogarnąć. Postanowiłem do mojej aplikacji webowej zaaplikować wielowątkowość. Chciałbym zapytać osoby obeznane w temacie, czy w takim przypadku jest wskazane użycie wielowątkowości czy to jednak mija się z celem.
Mam serwis w którym jest metoda odpowiedzialna za obliczanie korelacji Pearsona (korzystam z biblioteki org.apache.commons.math3), w skrócie w pętli pobieram dane z bazy (jest ich około 150) i obliczam korealcję wynik dodając do treeseta. Cała operacja zajmuje około 80sek. Teraz chciałbym w tej metodzie użyć wielowątkowości w celu zmiejszenia czasu obliczeń. Czy taka operacja jest możliwa? I czy jest to wskazane?
@pulla: Zanim wgryze sie w temat - czy obliczenia te da sie zrownoleglic? Jesli tak - jest to wskazane. Jesli obliczenia musza byc sekwencyjne - nic Ci to nie da.
@pulla: tru, tak jak mówi @martinuz. Jeśli wynik poprzedniego obliczenia nie jest Ci potrzebny to rozdziel to na wątki a potem sklej wyniki do kupy. Wynik może spać imo do około 20 sekund.
@msgreen: @mafias: Pozwolę sobie Was zawołać bo chciałbym sobie coś uporządkować. Jeśli dobrze rozumiem to w sytuacji: 1) Jeśli mam 3 metody (a, b, c) które muszą być wykonane po sobie bo: metoda c czeka na wynik z metody b, a metoda b czeka na wynik a. To w takim wypadku korzystanie z wielowątkowości nie ma sensu?
2) Mam jedną metodę (a) która przyjmuje jakiś parametr np. liczba
1) W takim wypadku wielowątkowość będzie miała sens jeśli spojrzymy na to z innej strony: mianowicie jeśli opakowałbyś metody A,B,C w jedną metodę D i metodę D byś wykonał kilka razy pod rząd. Jeśli wykonujesz taki przebieg 1 raz to nie ma sensu wysyłanie metod A,B,C na różne wątki bo będziesz musiał zadbać o kolejność wykonywania i czekać
@mafias: Bombowo dzięki za odpowiedź, to jednak w moim przypadku który wkliłem powyżej raczej wielowątkowości to słaby pomysł bardzo mało do zyskania mam. Wykorzystam ją w innej metodzie. Jak nie masz nic przeciwko, to jak będę miał jeszcze jakieś pytania to zawołam. Dzięki!
@pulla: Spoko, jeśli tylko będę potrafił to pomogę. Sam nie jestem ekspertem jeśli chodzi o concurrency i czasami działam na czuja. Człowiek chciałby to wszystko ogarnąć, ale za dużo tego :)
@mafias: Cześć, wkońcu udało mi się ogarnąć wielowątkowość w moim projekcie. Niestety za szybko wszystko chciałem i porywałem się z motyką na słońce. W skrócie miałem metodę która dla 179 spółek wczytywała dane z dysku z plików tekstowych całość trwała 456.345 sekund, zrobiłem dla tej metody dwa wątki i czas spadł dwukrotnie i wyniósł 230 sekund, dodając cztery wątki czas: 170 sekund. Bardzo zadowalający wynik. Teraz tylko kwestia czy metoda
@pulla Hi ho, nie znam dokładnych szczegółów Twojego przypadku i nie wiem czy masz jeden plik z danymi czy wiele plików, ale może ten komentarz coś rozjaśni: http://stackoverflow.com/a/11868557/3247884
@pulla jeśli dla każdej spółki dane mają taki sam model i te same metody używane są do obliczeń to w sumie brzmi to jak klasyczny producent-konsument :) Spoko, nie ma problemu :)
Cześć,
Do tej pory nie miałem styczności z wielowątkowością w javie a chciałbym ją ogarnąć. Postanowiłem do mojej aplikacji webowej zaaplikować wielowątkowość. Chciałbym zapytać osoby obeznane w temacie, czy w takim przypadku jest wskazane użycie wielowątkowości czy to jednak mija się z celem.
Mam serwis w którym jest metoda odpowiedzialna za obliczanie korelacji Pearsona (korzystam z biblioteki org.apache.commons.math3), w skrócie w pętli pobieram dane z bazy (jest ich około 150) i obliczam korealcję wynik dodając do treeseta. Cała operacja zajmuje około 80sek. Teraz chciałbym w tej metodzie użyć wielowątkowości w celu zmiejszenia czasu obliczeń. Czy taka operacja jest możliwa? I czy jest to wskazane?
Mój kod wygląda tak: http://wklej.org/id/1737701/
1) Jeśli mam 3 metody (a, b, c) które muszą być wykonane po sobie bo: metoda c czeka na wynik z metody b, a metoda b czeka na wynik a. To w takim wypadku korzystanie z wielowątkowości nie ma sensu?
2) Mam jedną metodę (a) która przyjmuje jakiś parametr np. liczba
1) W takim wypadku wielowątkowość będzie miała sens jeśli spojrzymy na to z innej strony:
mianowicie jeśli opakowałbyś metody A,B,C w jedną metodę D i metodę D byś wykonał kilka razy
pod rząd. Jeśli wykonujesz taki przebieg 1 raz to nie ma sensu wysyłanie metod A,B,C na różne wątki
bo będziesz musiał zadbać o kolejność wykonywania i czekać
Teraz tylko kwestia czy metoda