Thread e Task. L20_MultiThread 2
|
|
|
- Agnello Rossetti
- 10 anni fa
- Visualizzazioni
Transcript
1 I Thread in Java
2 Thread e Task Multitasking: capacità dei sistemi operativi di eseguire più programmi contemporaneamente. Ciascun programma ha il proprio insieme di variabili, costanti, ecc. Multithreading capacità dei programmi di eseguire, al loro interno, più task (thread) contemporaneamente. Un programma è multithread se il thread principale lancia almeno un thread secondario. I thread condividono le variabili, le classi del programma, lo spazio di indirizzamento, ha execution stack (stack delle chiamate) e program counter (indirizzo prox istruzione) privati. L20_MultiThread 2
3 Il multithreading è estremamente diffuso (es. browser che caricano più immagini contemporaneamente, o più pagine), la gestione delle richieste concorrenti da parte di un web service o un application server. Lo stesso meccanismo di garbage collecting è svolto tramite un thread Con JAVA 5 la gestione dei thread è stata completamente rivista ed arricchita, soprattutto dal punto di vista del sincronismo. Java offre degli strumenti che facilitano l'utilizzo dei thread, rispetto ad altri linguaggi di programmazione. L20_MultiThread 3
4 I thread sono caratterizzati dal loro stato ESECUZIONE PRONTO PER L'ESECUZIONE: in attesa di essere eseguito dalla CPU SOSPESO RIPRESO dal punto in cui era stato sospeso BLOCCATO quando attende una risorsa; TERMINATO L20_MultiThread 4
5 La priorità dei thread La priorità del thread stabilisce l importanza del trhead rispetto gli altri. La CPU privilegia il thread a maggiore priorità quando deve assegnare tempo di esecuzione ai vari thread. Un thread a priorità più alta può anche terminare un thread a priorità più bassa Il thread principale. Un programma Java possiede un thread di esecuzione, che è il thread principale. In esso si generano gli altri thread per i programmi multithread. Quando il thread thread principale termina, lo stesso programma termina. L20_MultiThread 5
6 Scheduling dei thread La JVM determina il tempo di esecuzione di ciascun thread con l'algoritmo FIXED PRIORITY SCHEDULING Un thread in esecuzione viene interrotto dallo scheduler quando: Un thread con priorità più alta diventa runnable; Il metodo run termina l esecuzione o il thread esegue un yield; Quando la porzione di tempo (quanto) di tempo assegnato dallo scheduler si è esaurito (non tutti i sistemi operativi - devono supportare il time slicing ) L20_MultiThread 6
7 Creazione di un thread in Java Java offre due possibilità di creazione di un thread: una istanza di un oggetto che estende l oggetto thread (package java.lang.*). una istanza di un oggetto che implementa l interfaccia runnable L20_MultiThread 7
8 Primo caso: sottoclasse di Thread Il codice del thread (il task del thread) deve essere inserito nel metodo run Nella classe Thread l implementazione del suo metodo run è vuota. Per attivare il thread si invoca il metodo start() che a sua volta invoca il metodo run() (che può essere chiamato solo attraverso start()) L20_MultiThread 8
9 class MyThread extends Thread { public MyThread(String str) { super(str); public void run() { for (int i=0;i<10;i++) { System.out.println(getName()+"it: "+i); try { sleep((int)(math.random() * 1000)); catch (InterruptedException e) { System.out.println(getName()+" finito!"); public class test { public static void main (String[] args) { MyThread t1=new MyThread("uno"); MyThread t2=new MyThread("due"); t1.start();//attivazione del thread t1 t2.start();//attivazione del thread t2 //= QUANTI THREAD CONCORRENTI COESISTONO in questo esempio? L20_MultiThread 9
10 Metodi della classe Thread resume run sleep(ms) start stop join suspend Riprende l esecuzione di un thread sospeso Contiene il codice eseguibile del tread Sospende il thread per un tempo definito di ms millesecondi Avvia il thread invocando il codice di esecuzione Forza la terminazione ell esecuzione di un thread. Tutte le risorse del thread vengono liberate (anche i lock), attraverso la propagazione dell eccezione ThreadDeath blocca il thread chiamante in attesa della terminazione del thread di cui si invoca il metodo. Sospente indefinatemente il thread L20_MultiThread 10
11 Interrompere un Thread Un thread termina quando il suo metodo run termina. Il metodo stop() per la terminazione forzata e stato deprecato, per scoraggiarne l'uso (evitare che il thread non rilasci risorse, ecc). Il metodo interrupt è usato per richedere la terminazione di un Thread, che viene messo nello stato interrupted I thread dovrebbero di tanto in tanto controllare se sono in uno stato interrupted. L20_MultiThread 11
12 Lo stato interrupted non è una richiesta mandatoria di terminazione, ma va interpretato caso per caso (verifica altre condizioni chiusura), ecc TIPICA IMPLEMENTAZIONE public void run() { try { //== while (!Thread.currentThread().isInterrupted() && more work to do) { do more work catch(interruptedexception e) { // thread was interrupted during sleep or wait finally { cleanup, if required // exiting the run method terminates the thread L20_MultiThread 12
13 Il metodo sleep solleva la InterruptedException se viene invocato quando è in uno strato interrupted. In questo caso non c'è bisogno di considerare lo stato Interrupted public void run() { try {... while (more work to do) { do more work Thread.sleep(delay); catch(interruptedexception e) { // thread was interrupted during sleep or wait finally { cleanup, if required // exiting the run method terminates the thread L20_MultiThread 13
14 Altri metodi interrupt() static boolean interrupted() boolean isinterrupted() currentthread() Mette il trhead nello stato booleano interrupt Verifica che il thread è stato messo in uno stato interrupted. L invocazione del metodo resetta lo stato interrupted a false Verifica che il thread è stato messo in uno stato interrupted. L invocazione del metodo NON resetta lo stato interrupted Restituisce il thread corrente (statico) L20_MultiThread 14
15 Il thread principale Il metodo currentthread restituisce il riferimento al thread corrente. Se lanciato all interno del programma principale da il riferimento al thread principale public class MainThread { public static void main(string args[]) { Thread t = Thread.currentThread(); t.setname( Main Thread"); t.setpriority(1); try { t.sleep(10000); catch (InterruptedException e) { System.out.println("Thread interrotto"); L20_MultiThread 15
16 L interfaccia runnable Con Interfaccia Runnable è possibile creare thread come sottoclasse di qualsiasi altra classe (non solo di Thread) Il codice eseguibile va inserito nel metodo run() nella classe che implementa l interfaccia Runnable Si deve creare un istanza della classe Si deve creare un istanza della classe Thread passando come parametro l istanza della classe che si è creata Per lanciare il thread si deve invocare il metodo start() sul thread creato producendo la chiamata al metodo run() L20_MultiThread 16
17 class MyRunnable extends MyClass implements Runnable { // MyClass è una classe qualsiasi (non sottoclasse di thread) public void run() { for (int i=1; i<=100; i++) System.out.println( CICLO + i); public class ExRunnable { public static void main(string args[]) { MyRunnable e = new MyRunnable(); Thread t = new Thread(e); t.start(); L20_MultiThread 17
18 Thread e priorità L assegnazione delle risorse da parte della JVM avviene secondo un schema preemptive, in base alla priorità dei thread. Ciascun thread eredita la priorità dei thread genitore. La priorità si può cambiare tramite il metodo setpriority La priorità varia tra MIN_PRIORITY o MAX_PRIORITY L20_MultiThread 18
19 La sincronizzazione In molte situazioni, i thread devono condividere risorse ed accedere agli stessi oggetti. Accedendo contemporaneamente agli stessi oggetti, due o più thread possono procurare effetti incontrollati sullo stato degli oggetti L20_MultiThread 19
20 Allo stesso modo i metodi stop() e suspend() dei thread possono generare situazioni iconsistenti o blocchi critici. I Thread possono, all atto della sospensione impegnare una risorsa in modo esclusivo, generando situazioni inconsistenti o di blocco critico (deadlock) L20_MultiThread 20
21 A partire dalla JDK vers. 1.4, i metodi stop(), suspend() e resume() sono diventati deprecated (sconsigliati), pur rimanendo presenti per retro compatibilità. Le azioni di controllo e sincronizzazione fra thread si devono più propriamente realizzare tramite i metodi wait(), notify(), notifyall() e gli object locks. L20_MultiThread 21
22 I thread condividono uno spazio comune di indirizzamento, e l interazione può avvenire tramite oggetti comuni, che sono: 1)Object locks -> i thread si autoescludono (interazione competitiva) 2)Variabili 3)Metodi di sincronizzazione -> interazione cooperativa L20_MultiThread 22
23 Lock I thread gestiscono le risorse comuni attraverso i lock assimilabili ai semafori del C. Si individuano alcune sezioni di codice che operano su un oggetto come sezioni critiche (la parola chiave synchronized). Il compilatore, in corrispondenza della sezione critica inserisce una intestazione (header), ed un epilogo (alla fine), in questo modo implementa il lock associato all oggetto riferito dalla sezione critica L20_MultiThread 23
24 Esempio: Object mutex_lock= new Object(); public void A( ) { ; synchronized (mutex_lock){ /* codice sezione critica */; ; Il codice della sezione critica viene eseguito se il lock è in stato libero, altrimenti il thread rimane in attesa. Gli oggetti che vogliono accede all oggetto, sono inseriti in una tabella dalla JVM, e via via accedono all oggetto non appena viene rilasciato dai vari thread L20_MultiThread 24
25 Il codice della blocco sincronizzato viene eseguito in maniera esclusiva da un thread Non ci possono essere altre esecuzioni dello stesso blocco Non ci possono essere esecuzione di altri blocchi sincronizzati sullo stesso oggetto L20_MultiThread 25
26 Metodi synchronized E possibile definire alcuni metodi sincronized, assicurandone la loro mutua esclusione public class intvar { private int i=0; public synchronized void incrementa() { i ++; public synchronized void decrementa() {i--; L esecuzione del metodo avviene in mutua esclusione utilizzando il lock dell oggetto. L20_MultiThread 26
27 I metodi wait e notify La sincronizzazione tra i thread puo avvenire anche con i metodi wait e notify I metodi wait interagiscono con il wait set, coda di thread associati ad un oggetto Gli oggetti entrano ed escono nel wait set con i metodi wait e notify, che possono essere invocati all interno di un blocco syncronized L20_MultiThread 27
28 wait rilascia il lock, sospende il e lo inserisce in wait set. notify Estrae il thread dal wait set e lo inserisce nel entry set. NON RILASCIA IL LOCK notifyall LIMITAZIONI Estrae tutti i thread dal wait set e li inserisce nell entry set NON rilascia il lock unica coda (wait set) per ogni oggetto sincronizzato non e` possibile sospendere thread su code differenti! L20_MultiThread 28
29 public class IntBox { private int[]contenuto; private int contatore, testa, coda; public IntBox(){ //==ctr contenuto = new int[10]; contatore = 0; testa = 0; coda = 0; public synchronized int preleva (){ int elemento; while (contatore == 0) wait(); elemento = contenuto[testa]; testa = (testa + 1)%10; --contatore; notifyall(); return elemento; public synchronized void deposita (int valore){ while (contatore == 10) wait(); contenuto[coda] = valore; coda = (coda + 1)%10; ++contatore; notifyall(); L20_MultiThread 29
30 Implementazione di un semaforo binario Java non prevede i semafori come nel C, ma possono essere implementati con i metodi di sincronizzazione public class Semaphore { private int value; public Semaphore (int initial){ value = initial; synchronized public void V()//signal sul semaforo { ++value; notify(); synchronized public void P() throws InterruptedException //wait { { while (value == 0) wait(); --value; L20_MultiThread 30
31 Interfaccia Condition In Java 5 sono state introdotte le interface condition e lock che permettono di estendere il meccanismo wait/notify e di esplicitare il lock public interface Condition{ void await ()throws InterruptedException; void signal(); void signalall(); public interface Lock{ //Public instance methods void lock(); void unlock(); Condition newcondition(); I metodi await, signal, e signalall sono equivalenti ai metodi wait, notify e notify_all, riferiti alla coda di processi associata alla condition sulla quale vengono invocati) L20_MultiThread 31
32 Ad ogni variabile condizione è associato un lock al momento della sospensione del thread mediante await viene liberato; al risveglio di un thread viene occupato. La creazione di una condition avviene col metodo newcondition del lock associato ad essa. Lock lockvar=new Mylock(); //Mylock è una classe che implementa //l interfaccia Lock Condition C=lockvar.newCondition(); L20_MultiThread 32
33 Equivalenza tra meccanismo lock e syncronized public void method() { implicitlock.lock(); try { //method body finally { implicitlock.unlock(); public synchronized void method() { //method body /*(es)*/ L20_MultiThread 33
34 DeadLock Possono verificarsi delle situazioni applicative in cui la concorrenza dei thread può bloccare l'elaborazione. E' il caso in cui un thread entra in una sezione critica di un metodo A, al cui interno c'è' l'invocazione di un metodo sincronizzato B, che a sua volta invoca il metodo A. Due thread che accedono al metodo A e B possono mutuamente bloccarsi, perché aspettano l'uscita dell'altro dalla sezione critica Non c'è un meccanismo effettivo per evitare i deadlock, né strumenti offerti da Java. Si devono escludere possibili situazioni di deadlock applicativamente L20_MultiThread 34
35 Blocking Queue Le blocking queue sono code tipo FIFO speciali con le due operazioni fondamentali (aggiungere un elemento in coda e rimuovere quello in testa), con la proprietà di bloccare i thread che vi accedono per aggiungere elementi quando la coda è piena, o quando cercano di rimuovere e la coda è vuota. In questo modo si dispone di un meccanismo di sincronizzazione dei thread e di bilanciamento del carico tra i therad L20_MultiThread 35
36 Metodi di blockqueue metodo Ok KO add Aggiunge un elemento alla lista Eccezione IllegalStateException se la coda è piena remove Rimuove e restituisce l'elemento top della lista Eccezione NoSuchElementException se la coda è vuota element Restituisce l'elemento top della lista Eccezione NoSuchElementException se la coda è vuota offer poll Aggiunge un elemento e restituisce true Rimuove e restituisce l'elemento top della lista Restituisce null se la coda è piena Restituisce null se la coda è vuota peek Restituisce l'elemento top della lista Restituisce null se la coda è vuota put Aggiunge un elemento alla lista Blocca la coda se è piena take Rimuve e restituisce l'elemento top Blocca la coda se è vuota della lista L20_MultiThread 36
37 Thread safe collection Quando due thread contemporaneamente accedono ad una collection, possono danneggiare la collection, produrre stati inconsistenti. E' possibile richiedere l'accesso esclusivo con dei meccanismi di sincronizzazione Il package java.util.concurrent offre delle efficienti implementazioni di collection che thread safe, che consentono a diversi thread di accedere contemporaneamente alla struttura (fino a 16) L20_MultiThread 37
38 L'effetto si ottiene attraverso sofisticati algoritmi che regolano l'accesso ed iteratori di tipo weak che possono non tenere conto delle ultime modifiche alla struttura Esempio: ConcurrentHashMap L20_MultiThread 38
39 Interfacce Callable e Future L'interfaccia callable è simile alla Runnable solo che prevede che venga restituito un valore public interface Callable<V> { V call() throws Exception; L'interfaccia Future puo' essere usata per lanciare una computazione (asincrona), ed ottenere il risultato successivamente public interface Future<V> { V get() throws...; V get(long timeout, TimeUnit unit) throws...; void cancel(boolean mayinterrupt); boolean iscancelled(); boolean isdone(); L20_MultiThread 39
40 Thread Pools Java fornisce dei meccanismi (classi Executors) per gestire thread pool. In questo modo il numero di thread creati è controllato (con minore dispendio di risorse) newfixedthreadpool Pool di thread fisso e mantenuti in idle indefinitamente. newcachedthreadpool I thread sono creati quando necessario, e mantenuti in idle per 60 sec. newsinglethreadexecutor Un pool costituito da un solo thread che svolge i supoi compiti sequenzialmente newscheduledthreadpool Pool fisso per esecuzioni schedulate newsinglethreadscheduledexecutor Single thread per l'esecuzione schedulata L20_MultiThread 40
41 Syncronizers Il package java.util.concurrent dispone di una serie di oggetti specializzati nella sincronizzazione classe Cosa fa Quando usarla CyclicBarrier CountDownLatch Exchanger SynchronousQueue Semaphore Fa in modo che un certo numero di thread aspettano il compimento delle azioni di tutti gli altri, quindi esegue una azione opzionale (barrier action) Mette in attesa un set di thread fino a che un contatore raggiunge il valore 0 Fa in modo che due thread si scambino un oggetto quando sono pronti per farlo Fare in modo che due thread possono scambiarsi degli oggetti, quando entrambi sono pronti per farlo. Quando un thread invoca put sulla coda, si blocca fino a che un altro thread invoca take Quando è necessario aspettare che i thread abbiamo finito la loro azione per passare alla successiva Quando è necessario che un tread aspetti un certo risultato per entrare in azione Quando due trhead devono condividere una istanza modificando i suoi valori A differenza di exchanger, lo scambio dati è unidirezionale Blocca i thread fino a che è possibile Agendo sul numero di permit, consente di procedere limitare l'accesso a risorse ad un numero di thread alla volta Se permit =1 l'accesso è consentito solo se un altro thread ad il L20_MultiThread permesso 41
Java Virtual Machine
Java Virtual Machine programmi sorgente: files.java compilatore files.class bytecode linker/loader bytecode bytecode Java API files.class interprete macchina ospite Indipendenza di java dalla macchina
Multithreading in Java. Fondamenti di Sistemi Informativi 2014-2015
Multithreading in Java Fondamenti di Sistemi Informativi 2014-2015 Multithreading La programmazione concorrente consente di eseguire più processi o thread nello stesso momento. Nel secondo caso si parla
GESTIONE DEI PROCESSI
Sistemi Operativi GESTIONE DEI PROCESSI Processi Concetto di Processo Scheduling di Processi Operazioni su Processi Processi Cooperanti Concetto di Thread Modelli Multithread I thread in Java Concetto
Java threads (2) Programmazione Concorrente
Java threads (2) emanuele lattanzi isti information science and technology institute 1/28 Programmazione Concorrente Utilizzo corretto dei thread in Java emanuele lattanzi isti information science and
T 1. Per un processo con più thread di controllo, lo stato di avanzamento della computazione di ogni thread è dato da:
Un thread (o processo leggero) è una attività, descritta da una sequenza di istruzioni, che esegue all'interno del contesto di esecuzione di un programma. Un thread procede nella sua esecuzione per portare
Programmazione concorrente in Java. Dr. Paolo Casoto, Ph.D. - 2012 1
+ Programmazione concorrente in Java 1 + Introduzione al multithreading 2 La scomposizione in oggetti consente di separare un programma in sottosezioni indipendenti. Oggetto = metodi + attributi finalizzati
Gestione dei thread in Java LSO 2008
Gestione dei thread in Java LSO 2008 Cos è un Thread? Si può avere la necessità di suddividere un programma in sottoattività separate da eseguire indipendentemente l una dall altra Queste sottoattività
19. Introduzione al multi-threading
19. Introduzione al multi-threading Marco Faella Dip. Ing. Elettrica e Tecnologie dell'informazione Università di Napoli Federico II Corso di Linguaggi di Programmazione II I thread I thread, o processi
Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:
Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante
Programmazione concorrente in Java
Programmazione concorrente in Java Multithreading in Java Ogni thread e un oggetto, creato come istanza della classe java.lang.thread La classe Thread contiene tutti i metodi per gestire i threads L utente
SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica
SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Esercitazioni di PROGETTAZIONE DEL SOFTWARE (Corsi di Laurea in Ingegneria Informatica ed Automatica ed Ingegneria
Il costrutto monitor [Hoare 74]
Il monitor 1 Il costrutto monitor [Hoare 74] Definizione: Costrutto sintattico che associa un insieme di operazioni (entry, o public) ad una struttura dati comune a più processi, tale che: Le operazioni
Telematica II 17. Esercitazione/Laboratorio 6
Multitasking e Multithreading Telematica II 17. Esercitazione/Laboratorio 6 Multitasking si riferisce all abilità di un computer di eseguire processi (jobs) multipli in maniera concorrente si ricorda che
Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati
Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Condizione di sincronizzazione Qualora si voglia realizzare una determinata politica di gestione delle risorse,la decisione se ad
Ottava Esercitazione. introduzione ai thread java mutua esclusione
Ottava Esercitazione introduzione ai thread java mutua esclusione Agenda Esempio 1 Concorrenza in Java: creazione ed attivazione di thread concorrenti. Esercizio 2 da svolgere Concorrenza in Java: sincronizzazione
Il costrutto monitor [Hoare 74]
Il monitor 1 Il costrutto monitor [Hoare 74] Definizione: Costrutto sintattico che associa un insieme di operazioni (entry o public) ad una struttura dati comune a più processi, tale che: Le operazioni
SISTEMI OPERATIVI. Sincronizzazione in Java (Monitor e variabili condizione in Java)
SISTEMI OPERATIVI (MODULO DI INFORMATICA II) LABORATORIO Sincronizzazione in Java (Monitor e variabili condizione in Java) Prof. Luca Gherardi Prof.ssa Patrizia Scandurra (anni precedenti) Università degli
Pronto Esecuzione Attesa Terminazione
Definizione Con il termine processo si indica una sequenza di azioni che il processore esegue Il programma invece, è una sequenza di azioni che il processore dovrà eseguire Il processo è quindi un programma
Monitor. Introduzione. Struttura di un TDA Monitor
Monitor Domenico Cotroneo Dipartimento di Informatica e Sistemistica Introduzione E stato introdotto per facilitare la programmazione strutturata di problemi in cui è necessario controllare l assegnazione
Java Virtual Machine. Indipendenza di java dalla macchina ospite. I threads in Java
programmi sorgente: files.java compilatore Indipendenza di java dalla macchina ospite Programmi java Programmi java Programmi java files.class bytecode linker/loader bytecode bytecode Java API files.class
La concorrenza in Java package java.util.concurrent Antonio Furone
La concorrenza in Java package java.util.concurrent Antonio Furone Coda Bloccante La classe LinkedTransferQueue è stata esplicitamente disegnata per dare supporto a problemi di tipo produttore/consumatore.
SISTEMI OPERATIVI. Sincronizzazione in Java (Semafori e barriere) Patrizia Scandurra (MODULO DI INFORMATICA II) LABORATORIO
SISTEMI OPERATIVI (MODULO DI INFORMATICA II) LABORATORIO Sincronizzazione in Java (Semafori e barriere) Patrizia Scandurra Università degli Studi di Bergamo a.a. 2012-13 La gestione dei thread in Java
Esercitazioni Ingegneria del So2ware 8 Threads. Giordano Tamburrelli [email protected] h@p://giordano.webfacdonal.com
Esercitazioni Ingegneria del So2ware 8 Threads Giordano Tamburrelli [email protected] h@p://giordano.webfacdonal.com 1 Flusso (thread) di esecuzione In un programma sequenziale esiste un solo
Esercitazione 2: Java Thread. Java Thread. Java Thread. Un thread:
Esercitazione 2: Thread Un thread è un singolo flusso sequenziale di controllo all interno di un processo Un thread (o processo leggero) è un unità di esecuzione che condivide codice e dati con altri thread
Terza Esercitazione. Unix - Esercizio 1. Unix System Call Exec Java Introduzione Thread
Terza Esercitazione Unix System Call Exec Java Introduzione Thread Stefano Monti [email protected] Unix - Esercizio 1 Scrivere un programma C con la seguente interfaccia:./compilaedesegui
Un esercizio d esame. Flavio De Paoli
Un esercizio d esame e note sulla gestione dei dati Flavio De Paoli Il testo (Appello 22 ottobre 2001) Una stazione di servizio dispone di n distributori di benzina. I clienti si presentano a uno dei distributori
Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.
Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione. Compito fondamentale di un S.O. è infatti la gestione dell
Gruppi di Thread. Java threads (3) Gruppi di thread e Timer. Operating Systems. Operating Systems. Java threads 3. Java threads 3
Java threads (3) Gruppi di thread e Timer emanuele lattanzi isti information science and technology institute 1/12 Gruppi di Thread emanuele lattanzi isti information science and technology institute 2/12
Sistemi Operativi. Processi GESTIONE DEI PROCESSI. Concetto di Processo. Scheduling di Processi. Operazioni su Processi. Processi Cooperanti
GESTIONE DEI PROCESSI 4.1 Processi Concetto di Processo Scheduling di Processi Operazioni su Processi Processi Cooperanti Concetto di Thread Modelli Multithread I thread in diversi S.O. 4.2 Concetto di
Definizione di thread Proprietà dei thread in Java Gestione delle priorità nei programmi multithreaded Gruppi di thread Accesso a variabili condivise
CEFRIEL Centro per la Formazione e la Ricerca in Ingegneria dell Informazione Politecnico di Milano Java Multithreading Programmazione concorrente in Java Docente: Diego Peroni [email protected] Indice
Esercitazioni 7 e 8. Bounded Buffer con sincronizzazione Java (1)
Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2001/2002 Corsi A e B Esercitazioni 7 e 8 Bounded Buffer con sincronizzazione Java (1) public class BoundedBuffer private
progam ponteasensounicoalaternato ; type dir = ( nord, sud );
Esercizio di Sincronizzazione Tra Processi: Ponte a Senso Unico Alternato Un ponte contiene una sola csia di traffico consentendo così l'accesso a macchine provenienti da una sola direzione per volta,
Oggetti Lezione 3. aspetti generali e definizione di classi I
Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione
Capitolo 7: Sincronizzazione
Capitolo 7: Sincronizzazione Il problema della sincronizzazione. Il problema della sezione critica. Hardware per la sincronizzazione. Semafori. Problemi classici di sincronizzazione. Monitor (cenni). 7.1
Informatica 3. Informatica 3. LEZIONE 6: Il controllo dell esecuzione. Lezione 6 - Modulo 1. Errori durante l esecuzione. Il controllo dell esecuzione
Informatica 3 Informatica 3 LEZIONE 6: Il controllo dell esecuzione Modulo 1: La gestione delle eccezioni Modulo 2: Programmazione concorrente Lezione 6 - Modulo 1 La gestione delle eccezioni Politecnico
T E O R I A D I P R O G E T T A Z I O N E D E L S O F T W A R E
Threading T E O R I A D I P R O G E T T A Z I O N E D E L S O F T W A R E Caratteristiche principali dei thread Consentono di eseguire elaborazioni simultanee in un programma scritto in C#. Possono essere
Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino
Il Sistema Operativo Il Sistema Operativo è uno strato software che: opera direttamente sull hardware; isola dai dettagli dell architettura hardware; fornisce un insieme di funzionalità di alto livello.
12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)
12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,
Sistemi Operativi. Lez. 13: primitive per la concorrenza monitor e messaggi
Sistemi Operativi Lez. 13: primitive per la concorrenza monitor e messaggi Osservazioni I semafori sono strumenti particolarmente potenti poiché consentono di risolvere ogni problema di sincronizzazione
RMI Remote Method Invocation
RMI Remote Method Invocation [Pagina intenzionalmente vuota] (1 12 2004) slide 4:1/18 (p.106) Un applicazione RMI è un applicazione distribuita ad oggetti. Applicazione RMI tipica, strutturata in: server:
Algoritmi di Ricerca. Esempi di programmi Java
Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare
Programmazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Grafica: Thread versione 1.0 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
Il problema del produttore e del consumatore. Cooperazione tra processi
Il problema del produttore e del consumatore Cooperazione tra processi Risorsa consumabile I processi disgiunti possono interferire tra loro a causa dell'uso di risorse permanenti, ma ognuno di essi ignora
Java: Compilatore e Interprete
Java: Compilatore e Interprete Java Virtual Machine Il bytecode non è Linguaggio Macchina. Per diventarlo, deve subire un ulteriore trasformazione che viene operata dall interprete Java in modalità JIT
13. Chain of Responsibility
Chain of Responsibility 92 13. Chain of Responsibility (GoF pag. 223) 13.1. Descrizione Consente di separare il mittente di una richiesta dal destinario, in modo di consentire a più di un oggetto di gestire
Scheduling della CPU Simulazione in linguaggio Java
Scheduling della CPU Simulazione in linguaggio Java Realizzato da: Amelio Francesco 556/001699 Di Matteo Antonio 556/000067 Viola Antonio 556/000387 Progetto di Sistemi Operativi Docente Giancarlo Nota
Lezione 15 Programmazione multithreaded
Lezione 15 Programmazione multithreaded Tutti i sistemi operativi, al giorno d'oggi, permettono di svolgere più operazioni simultaneamente. In questo momento, ad esempio, sto usando un word processor per
13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti
13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
Main System Monitor Keyboard
Composite 57 8. Composite (Gof pag. 163) 8.1. Descrizione Consente la costruzione di gerarchie di oggetti composti. Gli oggetti composti possono essere conformati da oggetti singoli, oppure da altri oggetti
SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE
SOMMARIO Coda (queue): Specifica: interfaccia. Implementazione: Strutture indicizzate (array): Array di dimensione variabile. Array circolari. Strutture collegate (nodi). Prestazioni. Strutture Software
SISTEMI OPERATIVI. Sincronizzazione dei processi. Domande di verifica. Luca Orrù Centro Multimediale Montiferru 30/05/2007
2007 SISTEMI OPERATIVI Sincronizzazione dei processi Domande di verifica Luca Orrù Centro Multimediale Montiferru 30/05/2007 Sincronizzazione dei processi 1. Si descrivano i tipi di interazione tra processi?
Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1
MECCANISMI E POLITICHE DI PROTEZIONE 13.1 Protezione Obiettivi della Protezione Dominio di Protezione Matrice di Accesso Implementazione della Matrice di Accesso Revoca dei Diritti di Accesso Sistemi basati
MECCANISMI E POLITICHE DI PROTEZIONE 13.1
MECCANISMI E POLITICHE DI PROTEZIONE 13.1 Protezione Obiettivi della Protezione Dominio di Protezione Matrice di Accesso Implementazione della Matrice di Accesso Revoca dei Diritti di Accesso Sistemi basati
Scheduling. Sistemi Operativi e Distribuiti A.A. 2004-2005 Bellettini - Maggiorini. Concetti di base
Scheduling Sistemi Operativi e Distribuiti A.A. 2-25 Bellettini - Maggiorini Concetti di base Il massimo utilizzo della CPU si ottiene mediante la multiprogrammazione Ogni processo si alterna su due fasi
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record
Esercizi sul Monitor in Java
Esercizi sul Monitor in Java 1 I filosofi a cena (E. Dijkstra, 1965) 5 filosofi sono seduti attorno a un tavolo circolare; ogni filosofo ha un piatto di spaghetti tanto scivolosi che necessitano di 2 forchette
Parola chiave extends
Il Linguaggio Java Ereditarietà Ereditarietà L'ereditarietà permette di creare nuove classi sulla base di classi esistenti In particolare, permette di riusare il codice (metodi e campi); aggiungere nuovi
Corso di Sistemi di Elaborazione delle informazioni
Corso di Sistemi di Elaborazione delle informazioni Sistemi Operativi Francesco Fontanella Complessità del Software Software applicativo Software di sistema Sistema Operativo Hardware 2 La struttura del
Esercizi della lezione 5 di Java
Esercizi della lezione 5 di Java Esercizio 5 Create il tipo di dato Counter dell Esercizio 1 come sottoclasse del tipo di dato SimpleCounter. Esercizio 1 Create un tipo di dato Counter che abbia: un valore
Corso di Linguaggi di Programmazione
Corso di Linguaggi di Programmazione Lezione 19 Alberto Ceselli [email protected] Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 18 Maggio 2010 idea: sfruttare i
Lo scheduler di UNIX (1)
Lo scheduler di UNIX (1) Lo scheduling a basso livello è basato su una coda a più livelli di priorità 1 Lo scheduler di UNIX (2) Si esegue il primo processo della prima coda non vuota per massimo 1 quanto
Synchronized (ancora)
Synchronized (ancora) Riscriviamo l esempio di prima. Usiamo una struttura modulare, con una classe Notificatore che ha opportuni metodi. La classe ha due campi privati, la lista buftext e un suo thread.
Il costrutto monitor
Il Monitor 1 Monitor Definizione del monitor Esempi d uso Realizzazione del costrutto monitor Realizzazione di politiche di gestione delle risorse Chiamate innestate a procedure del monitor Realizzazione
Algoritmi di scheduling
Capitolo 3 Algoritmi di scheduling Come caso particolare di studio, di seguito è discussa in dettaglio la politica di scheduling del sistema operativo LINUX (kernel precedente alla versione 2.6). Sono
Gestione delle Eccezioni
Gestione delle Eccezioni Condizioni di Errore Una condizione di errore in un programma può avere molte cause Errori di programmazione Divisione per zero, cast non permesso, accesso oltre i limiti di un
I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo
I Thread 1 Consideriamo due processi che devono lavorare sugli stessi dati. Come possono fare, se ogni processo ha la propria area dati (ossia, gli spazi di indirizzamento dei due processi sono separati)?
RMI. Java RMI RMI. G. Prencipe [email protected]
Java Remote Method Invocation -- RMI G. Prencipe [email protected] RMI RMI è una tecnologia JAVA che permette a una JVM di comunicare con un altra JVM per farle eseguire metodi È possibile che oggetti
Sistemi Operativi (modulo di Informatica II) I processi
Sistemi Operativi (modulo di Informatica II) I processi Patrizia Scandurra Università degli Studi di Bergamo a.a. 2009-10 Sommario Il concetto di processo Schedulazione dei processi e cambio di contesto
Con il pulsante Start si introducono palline che rimbalzano in un area di disegno fino a che non è terminato il loro ciclo di vita (1000 movimenti).
Rimbalzi. import java.awt.*; import java.awt.event.*; import java.applet.applet; public class Bounce extends Applet implements ActionListener { private Canvas canvas; private Button b1; private Button
Laboratorio di Sistemi Thread Java
Premessa Fare più di una cosa contemporaneamente per noi è una cosa piuttosto comune. La vita quotidiana è piena di esempi che ci possono chiarire il significato dell'avverbio contemporaneamente. Ad esempio
Esercizi sugli Oggetti Monitor
Esercizi sugli Oggetti Monitor Esercitazione di Laboratorio di Programmazione di Rete A Daniele Sgandurra Università di Pisa 29/10/2008 Wait e Notify Ogni oggetto in Java ha un lock implicito. Il lock
I THREAD O PROCESSI LEGGERI Generalità
I THREAD O PROCESSI LEGGERI Generalità Thread: segmento di codice (funzione) Ogni processo ha un proprio SPAZIO DI INDIRIZZAMENTO (area di memoria) Tutti i thread genereti dallo stesso processo condividono
Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica
Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL 1 Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono
Sincronizzazione con Java
Sincronizzazione con Java Corse critiche e sincronizzazione Java implementa un meccanismo simile al monitor per garantire la sincronizzazione fra thread Ogni oggetto ha un lock associato ad esso Nelle
Gestione del processore e dei processi
Il processore è la componente più importante di un sistema di elaborazione e pertanto la sua corretta ed efficiente gestione è uno dei compiti principali di un sistema operativo Il ruolo del processore
CAPITOLO 24 I MONITOR
EFFETTO DELLE PRIMITIVE - signal E wait SUI SEMAFORI CAPITOLO 24 I MONITOR I semafori sono un mezzo efficace per la gestione della mutua esclusione in ambienti con processi concorrenti, ma spesso è difficile
Programmazione Concorrente in Java
Programmazione Concorrente in Java Lorenzo Bettini Dip. Sistemi e Informatica, Univ. Firenze http://www.dsi.unifi.it/~bettini Ottobre 2005 Gestione dei Processi Un processo è un programma in esecuzione.
Test di unità con JUnit4
Test di unità con JUnit4 Richiamo sul test di unità Il test d unità è una metodologia che permette di verificare il corretto funzionamento di singole unità di codice in determinate condizioni. Nel caso
1. Che cos è la multiprogrammazione? Si può realizzare su un sistema monoprocessore? 2. Quali sono i servizi offerti dai sistemi operativi?
1. Che cos è la multiprogrammazione? Si può realizzare su un sistema monoprocessore? 2. Quali sono i servizi offerti dai sistemi operativi? 1. La nozione di multiprogrammazione prevede la possibilità di
L ambizione dei design pattern (letteralmente schemi di programmazione) è quella di offrire soluzioni a problemi ricorrenti che facilitano lo
Design Pattern L ambizione dei design pattern (letteralmente schemi di programmazione) è quella di offrire soluzioni a problemi ricorrenti che facilitano lo sviluppo dei programmi, il loro mantenimento,
Threads in Java. I threads. Costruttori. Prof.ssa Sara Michelangeli
Threads in Java Prof.ssa Sara Michelangeli I threads I threads o "processi leggeri" (light weight process) sono flussi di esecuzione nell'ambito di uno stesso processo, che condividono tra loro risorse
Il Sistema Operativo
Il Sistema Operativo Il Sistema Operativo Il Sistema Operativo (S.O.) è un insieme di programmi interagenti che consente agli utenti e ai programmi applicativi di utilizzare al meglio le risorse del Sistema
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2015-16. Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2015-16 Pietro Frasca Lezione 15 Martedì 24-11-2015 Struttura logica del sottosistema di I/O Processi
