View Full Version : [JAVA] benefici dei thread
anonimizzato
24-02-2011, 16:02
Ciao a tutti,
vorrei farvi una domanda sui Threads.
In questi giorni stiamo sviluppando un'applicazione Java che avrà il compito di caricare da DB una serie
di profili (record) come set di dati che poi verranno inviati ad un WebService uno ad uno per essere elaborati ed ottenere
in risposta un risultato calcolato.
es:
A1-B1-c1 -> WS -> R1
A2-B2-c3 -> WS -> R2
A3-B3-c3 -> WS -> R3
Siccome i profili (record) sono molti (5000) ed il WS ci metterà circa un 30 secondi per ogni risposta, il mio capo progetto ha
suggerito il fatto che useremo, molto probabilmente, i Thread.
Ora, io ho poco dimestichezza coi thread (anche se sò cosa sono e come si utilizzano), perciò volevo chiedere quali possono
essere, in questo caso, i benefici dell'utilizzare i thread.
Grazie in anticipo.
suddivisione del lavoro. suddivisione dei compiti del sw tra i thread in modo da svolgere più operazioni allo stesso tempo.
banryu79
24-02-2011, 16:21
...
Siccome i profili (record) sono molti (5000) ed il WS ci metterà circa un 30 secondi per ogni risposta, il mio capo progetto ha
suggerito il fatto che useremo, molto probabilmente, i Thread.
...
Bisogna capire "dove" intederebbe usare il multithreading, il tuo capo.
Dalla tua spiegazione dello scenario, dubito si intendesse lato applicazione che si interfaccia con il database locale, dato che il collo di bottiglia sembra essere il web service che impiega 30 sec. a elaborare una singola risposta, o sbaglio?
anonimizzato
24-02-2011, 19:32
Bisogna capire "dove" intederebbe usare il multithreading, il tuo capo.
Dalla tua spiegazione dello scenario, dubito si intendesse lato applicazione che si interfaccia con il database locale, dato che il collo di bottiglia sembra essere il web service che impiega 30 sec. a elaborare una singola risposta, o sbaglio?
Uhm, dovrei chiederglielo ma credo intendesse aprire un thread (quanti non saprei) per singola chiamata al WS.
banryu79
24-02-2011, 19:37
Uhm, dovrei chiederglielo ma credo intendesse aprire un thread (quanti non saprei) per singola chiamata al WS.
Quindi lato Web Service: ogni richiesta in arrivo viene processata da un singolo thread.
La questione allora dovrebbe riguardare una modifica del Web Service?
anonimizzato
25-02-2011, 07:11
Quindi lato Web Service: ogni richiesta in arrivo viene processata da un singolo thread.
La questione allora dovrebbe riguardare una modifica del Web Service?
No, non credo intendesse lato WS ma lato client ovvero all'interno dell'applicazione che pesca i profili (record) e poi utilizza lo Stub per chiamare il WS.
Es:
-Applicazione client
- select N profili from table (es: 5)
- ciclo sui 5 profili presi
- apro 1 thread per ciascuno di essi
- all'interno del thread utilizzo lo Stub per chiamare il WS.
Ma la mia, al momento è solo un'ipotesi, oggi dovrei chiarire meglio.
Il WS è comunque nostro quindi eventuali modifiche si posso sempre fare ma, ripeto, credo che intendesse come quanto riportato sopra.
banryu79
25-02-2011, 11:52
No, non credo intendesse lato WS ma lato client ovvero all'interno dell'applicazione che pesca i profili (record) e poi utilizza lo Stub per chiamare il WS.
Es:
-Applicazione client
- select N profili from table (es: 5)
- ciclo sui 5 profili presi
- apro 1 thread per ciascuno di essi
- all'interno del thread utilizzo lo Stub per chiamare il WS.
Ma la mia, al momento è solo un'ipotesi, oggi dovrei chiarire meglio.
Il WS è comunque nostro quindi eventuali modifiche si posso sempre fare ma, ripeto, credo che intendesse come quanto riportato sopra.
Ok, non avevo capito.
Allora il WS già acetta e processa richieste multiple; è il client che ne spedisce una e attende la risposta in modo sincrono, quando invece potrebbe spedirne varie contemporaneamente. Che è quello che dovrete fare.
Quindi invece di essere:
select su db
result set di 5 record
invio record 1 al WS
attesa...
processo la risposta
invio record N al WS
attesa...
processo la risposta
invio record 5 al WS
attesa...
processo la risposta
termino
Sarà:
select su db
result set di 5 record
thread1: invio record 1 al WS
thread2: invio record 2 al WS
thread3: invio record 3 al WS
thread4: invio record 4 al WS
thread5: invio record 5 al WS
attesa... [in teoria solo 30 sec. circa, se il WS processa più richieste in parallelo]
thread1: processo risposta 1
thread2: processo risposta 2
thread3: processo risposta 3
thread4: processo risposta 4
thread5: processo risposta 5
termino
Ma quindi i tuoi dubbi circa i benefici dell'usare più thread in questo scenario quali sono? No perchè, chiarendo i miei dubbi ti sei praticamente risposto da solo :D
anonimizzato
25-02-2011, 12:05
Ok, non avevo capito.
Allora il WS già acetta e processa richieste multiple; è il client che ne spedisce una e attende la risposta in modo sincrono, quando invece potrebbe spedirne varie contemporaneamente. Che è quello che dovrete fare.
Ma quindi i tuoi dubbi circa i benefici dell'usare più thread in questo scenario quali sono? No perchè, chiarendo i miei dubbi ti sei praticamente risposto da solo :D
Ho parlato con il mio capo progetto e posso confermare quanto ho riportato prima.
Il dubbio era legato all'uso delle risorse lato WS, mi spiego:
// PROCEDURA SEQUENZIALE
Se devo fare un ciclo su 2 record ed invocare per entrambi il WS che ci impiega 30 secondi l'uno, vuole dire che avrò completato la mia procedura in 60 secondi giusto?
// PROCEDURA A THREAD
Utilizzando invece 2 thread separati sull'applicazione client (due invocazioni contemporanee quindi) chi mi dice che il WS ci mette sempre 30 secondi ad ogni elaborazione?
Nel caso così fosse io avrò completato la stessa procedura nella metà del tempo visto che avrò le 2 risposte entrambe dopo 30 sec.
Il dubbio nasce dal fatto che, se io "bombardo il WS" di richieste simultanee (thread sul client) il WS non dovrebbe ridurre notevolmente la sua capacità elaborativa e quindi impiegare più tempo per ogni risposta?
Grazie ancora.
banryu79
25-02-2011, 13:09
Il dubbio nasce dal fatto che, se io "bombardo il WS" di richieste simultanee (thread sul client) il WS non dovrebbe ridurre notevolmente la sua capacità elaborativa e quindi impiegare più tempo per ogni risposta?
Boh. Dipende da come è fatto il WS naturalmente.
Io la vedo così.
Il client spedisce più richieste "in parallelo" al WS, con diversi thread.
Lato WS ci sarà il classico thread pool che riceve le richeste e le processa con i vari thread a disposizione. Un thread pool è configurabile in base alle esigenze (vedi package java.concurrent).
Naturalmente bisogna che il WS si strutturato in modo che il processo "calcolone da 30 sec" possa essere svolto da più thread contemporaneamente.
Se il calcolone usasse anche una sola risorsa che non può essere condivisa ma deve essere usata in modo esclusivo per tutto il tempo, ciao ciao.
Spero di non aver postato boiate :asd:
anonimizzato
25-02-2011, 15:34
Boh. Dipende da come è fatto il WS naturalmente.
Io la vedo così.
Il client spedisce più richieste "in parallelo" al WS, con diversi thread.
Lato WS ci sarà il classico thread pool che riceve le richeste e le processa con i vari thread a disposizione. Un thread pool è configurabile in base alle esigenze (vedi package java.concurrent).
Naturalmente bisogna che il WS si strutturato in modo che il processo "calcolone da 30 sec" possa essere svolto da più thread contemporaneamente.
Se il calcolone usasse anche una sola risorsa che non può essere condivisa ma deve essere usata in modo esclusivo per tutto il tempo, ciao ciao.
Spero di non aver postato boiate :asd:
Grazie ancora.
Vi farò sapere. :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.