A brief introduction to Java Threads as accessible from Processing.
Thread: definizione
Un thread (di controllo) è una lista di istruzioni eseguite
sequenzialmente da un programma. I thread di un programmacondividono uno stesso spazio di indirizzamento. Pur avendo
stack e variabili locali separate, condividono le variabiliglobali. I thread sono "leggeri", nel senso che la creazione,
distruzione e sincronizzazione sono relativamente economichegrazie alla condivisione dello spazio di indirizzamento.
Le ragioni per organizzare un programma in un certo numero dithread possono essere molteplici:
Certi programmi si scrivono più semplicemente, in
special modo le collezioni di compiti debolmente connessi(cioè largamente indipendenti).
I programmi interattivi risultano più efficienti
laddove il servizio dell'input o il display dell'output sonoorganizzati in thread distinti.
I programmi sono potenzialmente parallelizzabili su
architetture multi-processore o multi-core.
Il problema in esame richiede parti di programma in
comunicazione asincrona tra loro.
E' utile imporre una struttura modulare al
codice.
I/o non bloccante
Una delle motivazioni forti per la programmazione concorrentemediante thread è l'ottenimento di
servizi
non bloccanti per Input/Output. Quando l'applicazione
ha necessità di effettuare un I/O, è opportuno che non siblocchi, in modo da consentire che altre operazioni non
dipendenti da quell'I/O possano essere effettuate.Una tecnica di gestione dell'I/O non bloccante, utilizzata ad
esempio nei
microcontrollori usati nelle board per il physical computing, è il
polling , cioè la verifica ciclica
dell'accadimento di eventi su un insieme di dispositivi diinput. La ciclicità del polling è gestita da un timer.
L'I/O non bloccante si può realizzare mediante i thread. Lalettura di un certo dispositivo si può assegnare ad un certo
thread il quale si blocca in attesa dei dati. Gli altrithread, che non dipendono dalla lettura del dato, possono però
procedere in maniera concorrente.
Diagrammi di attivazione
Il codice Processing seguente invoca il metodo
stampa() sull'oggetto
cl della classe
Classe1 .
class Classe1 {
void stampa() {for (int i=0; i<100; i++) println("yep");
}}
void setup() {Classe1 cl = new Classe1();
cl.stampa();} Il flusso di elaborazione si può rappresentare graficamente
con il diagramma di attivazione di
[link] , il
quale presenta evidentemente un singolo thread.
Se invece la classe viene realizzata come
estensione della classe
Thread , allora è possibile procedere
all'attivazione di un thread secondario mediante invocazionedel metodo
start() . Il codice va riscritto come
class Classe2 extends Thread{
void run() {for (int i=0; i<100; i++) println("yep");
}}
void setup() {Classe2 cl = new Classe2();
cl.start();} Si noti che il metodo
stampa() ora si chiama
run() . Il metodo
start() esiste
nelle superclassi di
Classe2 (nella classe
Thread , e si occupa dell'invocazione del metodo
run() . Questa volta il flusso di elaborazione,
riportato in
[link] presenta due thread.
Esiste un
secondo
modo di dichiarare e attivare un thread , mediante
implementazione della interfaccia
Runnable di
Java. E' questa modalità che bisogna usare se si vuoleattivare un nuovo thread su un oggetto di una classe che è
già dichiarata come estensione di un'altra classe.
Questions & Answers
if three forces F1.f2 .f3 act at a point on a Cartesian plane in the daigram .....so if the question says write down the x and y components ..... I really don't understand
a fixed gas of a mass is held at standard pressure temperature of 15 degrees Celsius .Calculate the temperature of the gas in Celsius if the pressure is changed to 2×10 to the power 4