pulla
pulla
#programowanie #java

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?
  • Najlepsze
  • Wszystkie komentarze
mafias
mafias
@pulla: Hi ho, odpowiadając na pytania:

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ć
martinuz
martinuz
@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
pulla
pulla Autor
0
martinuz
martinuz
@pulla: Mysle ze bylaby pewna szansa tutaj. Linijka 12 i 13 wyglada jakby mogla byc odpalana rownolegle.
mafias
mafias
@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.
pulla
pulla
pulla Autor
0
@martinuz: @mafias: Ok dzięki za info, to zabieram się za wielowątkowość, ale już widzę że to dość ciężki temat.
m.....n
m.....n
Polecam książkę: Java Concurrency in Practice
pulla
pulla
pulla Autor
0
@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
pulla
pulla
pulla Autor
0
@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!
mafias
mafias
@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 :)
pulla
pulla
pulla Autor
0
@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
mafias
mafias
@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
pulla
pulla Autor
0
@mafias: Na szczęście mam wiele plików gdzie każdy plik jest szczegółami pojedyńczej spółki. Dzięki za pomoc !
mafias
mafias
@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 :)