Wpis z mikrobloga

#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?
  • 14
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@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.
  • Odpowiedz
@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.
  • Odpowiedz
@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
  • Odpowiedz
@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ć
  • Odpowiedz
@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!
  • Odpowiedz
@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 :)
  • Odpowiedz
@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
  • Odpowiedz
@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 :)
  • Odpowiedz