Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
POCO F9 Pro arriva sul mercato con l'obiettivo di portare prestazioni da smartphone top di gamma in una fascia di prezzo "più aggressiva", senza rinunciare a un comparto fotografico finalmente all'altezza. Dopo averlo testato sul campo, emerge uno smartphone molto più completo rispetto alla generazione precedente, ma anche con alcuni piccoli compromessi che diventano difficili da ignorare quando il prezzo di listino sfiora i 1.000 euro.
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Snapdragon Soung Gen 2 è la piattaforma Qualcomm per i dispositivi audio sempre più integrati nel mondo dell'intelligenza artificiale: al prorpio interno tanta potenza elaborativa per gestire al meglio le necessità d'uso dell'agentic AI
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
In occasione del proprio Snapdragon Summit Qualcomm annuncia i due nuovi chip per dispositivi mobile di fascia alta che entreranno nel mercato nel corso del 2027: tanta potenza a disposizione per elaborazioni di intelligenza artificiale sempre più complesse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 31-12-2009, 18:34   #1
noodles83
Senior Member
 
L'Avatar di noodles83
 
Iscritto dal: Oct 2005
Città: Pisa
Messaggi: 1047
[JAVA] temporizzazione Timer e Thread

Devo implementare un client che invia dei messaggi TCP ad un server secondo un loro protocollo.

Secondo le specifiche non il client non deve inviare più di 1 msg ogni 100millisec e deve inviare almeno un messaggio ogni 1000 millisec.

Ho pensato di utilizzare la classe java.util.Timer.

Nel mio caso ho una coda di msg da inviare e la mia idea è quella di avere un thread che si occupa di inviare questi msg non appena sono disponibili secondo le specifiche che vi ho detto prima.


public class Temporizzatore {

ArrayList<Message> codaMsg = new ArrayList<Message>(); // coda di messaggi da inviare
Timer timer;
int count = 0; //contatore iterazioni senza msg da inviare


//costruttore
public Temporizzatore(){
this.timer=new Timer();
timer.schedule(new sendingTask(),0,100); //parte subito e itera ogni 100msec
}


class sendingTask extends TimerTask{

public void run(){ }

}


}


la inner class sendingTask contiene ovviamente il metodo run(), che non vi ho scritto. Questo metodo si limita a verificare che la coda non sia vuota, se non è vuota spedisce il primo msg e termina. Se la coda è vuota incrementa count di uno e finisce. Se count è uguale a 9 vuol dire che sono arrivato a 900msec e che quindi devo per forza inviare un msg, che sarà un msg della coda se lo contiene oppure un semplice messaggio PING, questo per garantire che ne invii almeno ogni secondo. Tutto questo è garantito funzionare ogni 100msec dalla timer.

La cosa funziona, ma c'è una cosa che non ho chiaro e mi turba. Quanti thread utilizzo cosi?
Facendo come faccio io ogni 100msec creo un thread che esegue la run e poi termina?

Se questo è il caso, mi pare sia uno spreco enorme in termini di overhead, dato le poche cose che deve fare il thread, specialmente nel caso in cui si limita solo ad incrementare count.

che mi dite?
__________________
Vendite concluse ottimamente con: Bastian UMTS, Tiscaliniano.
---------------------------------------------------------
1) Macbook Pro Core 2 Duo 2,16Ghz - 2GB di RAM - HD 160GB - Glossy Widescreen - 2°Gen
2) iPhone 3G - 8GB Black
3) Ipod Shuffle Blu 1GB
4) iMac 27" QuadCore i7
noodles83 è offline   Rispondi citando il messaggio o parte di esso
Old 01-01-2010, 13:38   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Ad ogni java.util.timer è associato un Thread. Tu hai un Timer per ogni Temporizzatore quindi hai un thread per ogni temporizzatore.

Tieni conto che nel dubbio puoi verificare quanti thread usi un tuo programma - e che fine facciano - lanciando da console il programma "jvisualvm". E' un profiler integrato nel JDK che, appunto, è in grado di darti una panoramica sulle risorse usate dal tuo programma.

Attenzione che, a rigor di logica, non puoi garantire il secondo requisito (un messaggio ogni 1000 ms) con una JVM standard. A seconda dell'applicazione infatti è possibile che il garbage collector entri in funzione e blocchi i thread del programma per un tempo superiore al secondo durante una major collection. Affinchè ciò avvenga il programma deve produrre quantità considerevoli di immondizia ma, ripeto, è un evento che in teoria può verificarsi.

Praticamente se al mancato invio di un messaggio entro 1000 ms capita che qualcuno ci lasci le penne o perda una valanga di denari dovresti usare una piattaforma Java RTSJ
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 01-01-2010, 13:57   #3
noodles83
Senior Member
 
L'Avatar di noodles83
 
Iscritto dal: Oct 2005
Città: Pisa
Messaggi: 1047
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Ad ogni java.util.timer è associato un Thread. Tu hai un Timer per ogni Temporizzatore quindi hai un thread per ogni temporizzatore.
quindi io se istanzio un solo Temporizzatore una ed una sola volta all'inizio del programma dovrei avere un unico thread che esegue ogni 100ms il task sendingTask giusto? se ho capito bene essendo il solito Temporizzatore, il thread dovrebbe essere il solito sempre e non si dovrebbero creare e distruggere nuovi thread. Fammi capire se ho capito bene

p.s. provo anche a utilizzare quella utility che mi ha consigliato.
__________________
Vendite concluse ottimamente con: Bastian UMTS, Tiscaliniano.
---------------------------------------------------------
1) Macbook Pro Core 2 Duo 2,16Ghz - 2GB di RAM - HD 160GB - Glossy Widescreen - 2°Gen
2) iPhone 3G - 8GB Black
3) Ipod Shuffle Blu 1GB
4) iMac 27" QuadCore i7
noodles83 è offline   Rispondi citando il messaggio o parte di esso
Old 01-01-2010, 14:10   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
E' esatto.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole! realme 16 Pro Harry Potter Edition: il nuovo mid...
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Opera: la VPN gratuita si accende in aut...
Giochi capaci di costruirsi in tempo rea...
Giochi DX11 su Intel Arc e Proton: le ot...
Bentley Torcal ufficiale: 876cv e ricari...
Counter-Strike 2: con poche modifiche, V...
Silent Hill potrebbe tornare al cinema c...
L'integrazione di ChatGPT su Siri è stat...
ASML: 'Non vendiamo assolutamente nulla ...
Anthropic limita Claude Opus 5.5 nello s...
Microsoft 365, l'Antitrust respinge le p...
SAP NOW AI Tour Milan: una giornata con ...
Quake Champions dice addio al free-to-pl...
Anker AeroClip 2, li indossi e dopo un p...
Notebook ASUS da gaming per il Back to S...
Auto elettriche UE al 21,7%: sorpasso si...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 22:43.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v