Lab 1: Java Multithreading

Размер: px
Начинать показ со страницы:

Download "Lab 1: Java Multithreading"

Транскрипт

1 Dept. of Computer Science Lab 1: Java Multithreading Matteo Camilli Laboratorio di Sistemi Operativi a.a. 2015/16 Università degli Studi di Bergamo 1

2 Outline Programmazione multithreading I thread in Java Creare e avviare thread in Java Terminazione e cancellazione di thread in Java Esercizi 2

3 Multitasking Multitasking: task multipli (processi), condividono le medesime risorse computational (CPU). Con un sistema operativo (SO) multitasking, è possibile eseguire contemporaneamente diverse applicazioni. Single core CPU: solamente un unico processo alla volta è in esecuzione. Lo scheduler del SO sceglie, per ogni istante di tempo, quale dei processi in coda viene eseguito. Multicore CPU: Quando ci sono a disposizione più unità computazionali, un SO multicore può eseguire più processi in modo concorrente. I core lavorano indipendentemente su diversi processi. 3

4 Multithreading Multithreading: Multithreading estende l idea del multitasking a livello di processo, in modo da poter suddividere specifiche operazioni di una singola applicazione in thread separati. Ogni thread può essere eseguito in parallelo. Il SO divide il tempo di processamento non solo tra diversi processi, ma anche tra diversi thread di ogni processo. 4

5 Processo vs Thread PROCESSO: Programma in esecuzione è autonomo e indipendente dagli altri processi ha un proprio spazio di indirizzamento riservato (porzione di memoria RAM) e non condivide memoria con altri processi (anche le variabili globali sono private al processo) ha un proprio stack riservato (quindi anche le variabili locali sono private al processo) La comunicazione tra processi distinti non può quindi avvenire in modo diretto (per condivisione di variabili), ma deve sfruttare appositi meccanismi (es., file o socket) THREAD: Attività autonoma che vive all interno di un processo Non è indipendente, è un sotto-flusso di esecuzione concorrente di un determinato processo non ha uno spazio di indirizzamento riservato: tutti i thread appartenenti allo stesso processo condividono il medesimo spazio di indirizzamento La a comunicazione fra thread può avvenire tramite lo spazio di memoria condiviso (variabili globali condivise) Occorre però disciplinare l accesso alla memoria condivisa -> necessità di opportuni meccanismi di sincronizzazione 5

6 Processo vs Thread Thread 0 Thread 1 Thread n 6

7 Concorrenza DEFINIZIONE: Esecuzione di task multipli nello stesso tempo PROGRAMMA SEQUENZIALE per ogni esecuzione sulla medesima macchina produce sempre lo stesso output, eseguendo sempre la medesima sequenza di istruzioni esecuzione DETERMINISTICA PROGRAMMA CONCORRENTE ogni task corrisponde ad un flusso di esecuzione eseguito in parallelo nonostante abbiano lo stesso input, un programma concorrente può esibire comportamenti differenti su diverse esecuzioni esecuzione NON DETERMINISTICA 7

8 Java Thread Ogni programma Java ha almeno un thread corrispondente all esecuzione del metodo main(): main thread Qualsiasi processo Java è multithread: Il garbage-collector è gestito da un thread separato La gestione dei thread in Java dipende dalla specifica Java Virtual Machine (JVM) usata Green (user level) threads: vengono schedulati dalla JVM invece che dal sottostante SO. I green threads emulano ambienti multithreading anche in SO che non lo supportano. Sono gestiti in user-space invece che kernel-space. Native threads (da Java 1.3): vengono gestiti dallo scheduler del SO in kernel-space. 8

9 Java Thread lifecycle / runnable 9

10 java.lang.thread E possibile creare dei thread in Java estendendo la classe java.lang.thread I thread vengono effettivamente creati dalla JVM quando viene invocato il metodo: start() 10

11 Creare Thread METODO 1 METODO 2 Downloader d = new Downloader(url); d.start(); Thread d = new Thread(new Downloader(url)); d.start(); 11

12 Creare Thread Parametri durante la creazione di un Thread: Runnable target -> Oggetto che implementa il metodo run() String threadname -> Nome che diamo al thread ThreadGroup group -> Gruppo di cui il thread creato fa parte 12

13 Metodi della classe Thread DOCUMENTAZIONE Esempi: getname(), setname(string s) per ottenere e settare, rispettivamente, il nome di un thread Thread.sleep(int ms) consente di bloccare il thread corrente per il numero specificato di millisecondi Thread.currentThread() restituisce il riferimentodel thread attualmente in esecuzi join() invocando il metodo join su un oggetto thread, il thread corrente si blocca fino alla terminazione del thread associato a tale oggetto 13

14 Interruzione di un Thread I thread terminano la propria esecuzione quando l esecuzione del metodo run() finisce E possibile invocare il metodo interrupt() su un oggetto Thread Un interrupt è un segnale inviato ad un thread il quale dovrebbe interrompere ciò che sta facendo e reagire al segnale. E il programmatore che definisce come il thread reagisce ad un interrupt (e molto comune reagire terminando l esecuzione). 14

15 Esercizi Concorrenza piattaforma ospitante: Creare un applicazione con due thread figli. Ciascuno dei due thread ha associato un simbolo (ad es. * o #). Sovrascrivere il metodo run() in modo che ciascun thread stampa continuamente su stdout il proprio simbolo, andando a capo ogni 50 simboli stampati. Non determinismo: creare un applicazione Java contenente 3 thread come segue. Un thread principale corrispondente al metodo main() che stampa il suo nome, e poi crea ed avvia due thread dello stesso tipo: un thread di nome A e un thread di nome B. Il comportamento dei thread consiste nell attendere 1 secondo e stampare su stdout il proprio nome. Provare ad eseguire l applicazione più volte, e a comprendere cosa succede. Interrupt: creare un applicazione Java contenente 3 thread. Un thread principale main(), che crea ed avvia due altri thread, e dopo avere atteso qualche secondo invia un interrupt() ad entrambi i thread lanciati. Il primo thread deve ricevere il segnale mentre è bloccato in sleep. Il secondo thread riceve il segnale mentre è in running. Entrambi i thread dopo avere ricevuto il segnale stampano su stdout un messaggio opportuno e poi terminano l esecuzione. Somma parallela: Scrivere un programma multithread in Java che dato un array di 50 valori numerici ne esegue la somma in modo parallelo. Creare 5 thread e assegnare ad ogni thread una partizione dell array (10 valori). Ogni thread esegue la somma dei propri valori e mettere il risultato in una struttura dati del thread main contenente i risultati parziali. Il thread main deve sincronizzarsi sulla terminazione (join) dei thread figli dopodiché somma i risultati parziali e li stampa su stdout. 15

16 Esercizi (2) Somma parallela (Thread Pool): Svolgere l esercizio precedente utilizzando un thread pool: final ExecutorService pool = Executors.newFixedThreadPool(5); I Thread che eseguono la somma in parallelo devono implementare l interfaccia: Callable<V> Il main thread accumula i risultati parziali in una lista di oggetti di tipo: Future<V> La somma totale viene stampata su stdout. 16

Sistemi Operativi GESTIONE DEI PROCESSI. D. Talia - UNICAL. Sistemi Operativi 4.1

Sistemi Operativi GESTIONE DEI PROCESSI. D. Talia - UNICAL. Sistemi Operativi 4.1 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

Подробнее

Introduzione al Multithreading

Introduzione al Multithreading Introduzione al Multithreading Claudia Calidonna Istituto di di Cibernetica C.N.R. Argomenti principali Parleremo di : Processi & Threads Operazioni sui threads ed eventuali confronti tra operazioni sui

Подробнее

Multithreading in Java I parte. Lorenzo Gallucci

Multithreading in Java I parte. Lorenzo Gallucci Multithreading in Java I parte Lorenzo Gallucci Java: un linguaggio ed un sistema predisposti per il multitasking È possibile creare e gestire Thread nativamente (senza dover ricorrere a librerie esterne)

Подробнее

Esercitazione 2: Java Thread. Java Thread. Java Thread. Un thread:

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

Подробнее

ACSO Programmazione di Sistema e Concorrente

ACSO Programmazione di Sistema e Concorrente ACSO Programmazione di Sistema e Concorrente P2 Modello Thread 2/12/2015 programma e parallelismo il tipo di parallelismo dipende dal grado di cooperazione (scambio di informazione) necessario tra attività

Подробнее

Threads in Java. I threads. Costruttori. Prof.ssa Sara Michelangeli

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

Подробнее

5 Thread. 5 Thread. 5 Thread. Ad un generico processo, sono associati, in maniera univoca, i seguenti dati e le seguenti informazioni:

5 Thread. 5 Thread. 5 Thread. Ad un generico processo, sono associati, in maniera univoca, i seguenti dati e le seguenti informazioni: 1 Ad un generico processo, sono associati, in maniera univoca, i seguenti dati e le seguenti informazioni: codice del programma in esecuzione un area di memoria contenente le strutture dati dichiarate

Подробнее

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 20 Alberto Ceselli [email protected] Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 14 Maggio 2013 Programmazione concorrente:

Подробнее

Telematica II 17. Esercitazione/Laboratorio 6

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

Подробнее

Java Virtual Machine. Indipendenza di java dalla macchina ospite. I threads in Java

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

Подробнее

Concorrenza e sincronizzazione

Concorrenza e sincronizzazione Concorrenza e sincronizzazione Ingegneria del software Ing. Jody Marca [email protected] Cosa faremo oggi 2 Concorrenza Sincronizzazione Concorrenza 3 Nei programmi Java fino ad ora sviluppati è presente

Подробнее

Java thread, concorrenza

Java thread, concorrenza Java thread, concorrenza laboratorio 1 A.Memo febbraio 2004 il thread principale in Java ogni programma in esecuzione è un thread il metodo main() è associato al main thread per poter accedere alle proprietà

Подробнее

Modelli di programmazione parallela

Modelli di programmazione parallela Modelli di programmazione parallela Oggi sono comunemente utilizzati diversi modelli di programmazione parallela: Shared Memory Multi Thread Message Passing Data Parallel Tali modelli non sono specifici

Подробнее

I THREAD O PROCESSI LEGGERI

I THREAD O PROCESSI LEGGERI I THREAD O PROCESSI Processi (pesanti): LEGGERI entità autonome con poche risorse condivise (si prestano poco alla scrittura di applicazioni fortemente cooperanti) Ogni processo può essere visto come Immagine

Подробнее

Esercizio Sincronizzazione Thread

Esercizio Sincronizzazione Thread Esercitazione di oratorio 17/10/2007 Esercizio Il laboratorio di Informatica del Polo Marzotto e utilizzato da tre tipi di utenti, studenti, tesisti e professori ed ogni utente deve fare una richiesta

Подробнее

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7

Подробнее

Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova.

Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova. Programmi applicativi Un programma applicativo (o applicativo) è un eseguibile che può essere utilizzato dall utente e che ha funzionalità di alto livello (word processor, spreadsheet, DBMS) Univ. Milano-Bicocca

Подробнее

CLASSIFICAZIONE DEI SISTEMI OPERATIVI (in ordine cronologico)

CLASSIFICAZIONE DEI SISTEMI OPERATIVI (in ordine cronologico) CLASSIFICAZIONE DEI SISTEMI OPERATIVI (in ordine cronologico) - Dedicati Quelli dei primi sistemi operativi. La macchina viene utilizzata da un utente per volta che può eseguire un solo programma per volta.

Подробнее

I Processi. Il Concetto di Processo

I Processi. Il Concetto di Processo I Processi Il Concetto di Processo Il processo è un programma in esecuzione È l unità di esecuzione all interno del SO Solitamente, l esecuzione di un processo è sequenziale (le istruzioni vengono eseguite

Подробнее

Il Sistema Operativo

Il Sistema Operativo Il Sistema Operativo Il sistema operativo Con il termine sistema operativo si intende l insieme di programmi e librerie che opera direttamente sulla macchina fisica mascherandone le caratteristiche specifiche

Подробнее

LABORATORIO di Reti di Calcolatori

LABORATORIO di Reti di Calcolatori LABORATORIO di Reti di Calcolatori Architetture client-server 1 of 12 v slide della docente Bibliografia v testo di supporto: D. Maggiorini, Introduzione alla programmazione client-server, Pearson Ed.,

Подробнее

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2016-17 Pietro Frasca Lezione 5 Martedì 25-10-2016 Definizione di processo Esiste una distinzione concettuale

Подробнее

GESTIONE DEI PROCESSI

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

Подробнее

I thread. Motivazioni e definizione. Modelli di programmazione multithread. Librerie per i thread. Problemi nella programmazione multithread

I thread. Motivazioni e definizione. Modelli di programmazione multithread. Librerie per i thread. Problemi nella programmazione multithread I Thread I thread Motivazioni e definizione Modelli di programmazione multithread Librerie per i thread Problemi nella programmazione multithread Thread di Linux 4.2 Motivazioni 1 La gestione dei processi

Подробнее

LABORATORIO DI SISTEMI OPERATIVI

LABORATORIO DI SISTEMI OPERATIVI LABORATORIO DI SISTEMI OPERATIVI Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Guglielmo Cola Email: [email protected] Web: iet.unipi.it/g.cola Processi in Unix/Linux caratteristiche

Подробнее

Sistemi Operativi. Lezione 3 Processi e Thread

Sistemi Operativi. Lezione 3 Processi e Thread Lezione 3 Processi e Thread Introduzione Sino ai sistemi batch la CPU di un sistema svolgeva un attività, la portava a termine e solo allora avviava un altra attività Con l avvento della multiprogrammazione

Подробнее

Esercitazione [01] Processi e Thread

Esercitazione [01] Processi e Thread Esercitazione [01] Processi e Thread Leonardo Aniello Daniele Cono D Elia Giuseppe Laurenza Federico Lombardi

Подробнее