• Non ci sono risultati.

LPR -B-08 Thread Pooling5/10/2008Vincenzo Gervasi Esercitazione n.2

N/A
N/A
Protected

Academic year: 2021

Condividi "LPR -B-08 Thread Pooling5/10/2008Vincenzo Gervasi Esercitazione n.2"

Copied!
4
0
0

Testo completo

(1)

U

Esercitazione 2: Thread pooling Vincenzo Gervasi 1

Esercitazione n.2

LPR -B-08

Thread Pooling 5/10/2008

Vincenzo Gervasi

Università degli Studi di Pisa

Dipartimento di Informatica

(2)

U

Esercitazione 2: Thread pooling Vincenzo Gervasi 2

ESERCIZIO 1 – CALCOLATORE ASINCRONO

Si realizzi un calcolatore asincrono, in grado cioè di calcolare espressioni senza dover attendere la fine di un calcolo prima di accettare l'espressione successiva.

• Il programma deve accettare in input un'espressione in una delle seguenti forme:

 PI:precisione – calcola il valore di PI greco, come abbiamo visto in precedenza, fino all'approssimazione di 1/10precisione

 FIB:n – calcola il valore dell'n-esimo numero di Fibonacci, col metodo ricorsivo (con due chiamate)

 FACT:n – calcola il fattoriale di n, col metodo ricorsivo (con una chiamate)

 QUIT – termina il programma (una volta finiti i calcoli in sospeso)

• Ad ogni espressione, il programma aggiunge un task a un threadpool, che effettuerà il calcolo e stamperà il risultato a video, e torna immediatamente a chiedere il

prossimo input

• I thread di calcolo devono stampare, a fine esecuzione: il nome del loro thread,

l'istante di creazione, l'istante di inizio esecuzione, l'istante di completamento, e il risultato del calcolo

(3)

U

Esercitazione 2: Thread pooling Vincenzo Gervasi 3

ESERCIZIO 2 – RAFFINAMENTI

• Con riferimento all'esercizio precedente:

Si faccia in modo che il ciclo principale del calcolatore stampi un prompt per indicare la disponibilità a ricevere input

 Per esempio: “Inserisci espressione: “

 Quando un calcolo termina, verrà stampato il risultato su video. Fare in modo che la stampa non confonda il prompt

In particolare, occorre che il ciclo principale ristampi il prompt se è stato stampato un risultato

Si sperimenti poi con diverse politiche di pooling

 In particolare: qual'è il numero di thread eseguibili contemporaneamente su queste macchine, in maniera tale da minimizzare i tempi d'attesa?

 Tempo fra l'invio di una richiesta e il suo completamento

 Tempo fra l'inizio del servizio di una richiesta e il suo completamento

(4)

U

Esercitazione 2: Thread pooling Vincenzo Gervasi 4

ESERCIZIO 3 – UN EXECUTOR CUSTOM

Si usi una struttura dati “coda ordinata” per implementare un Executor che scheduli i task in base a un campo priorità, indicato dal task stesso

• La priorità (che viene stabilita in fase di creazione e/o sottomissione del task) deve anche essere usata come priorità del thread relativo.

• Si tenga presente che i thread possono essere riutilizzati per task a priorità diversa (la priorità va quindi stabilita al momento della “presa in carico” di un task).

• Si crei infine un main di prova che sottometta vari task al vostro Executor, e ne

visualizzi l'ordine di sottomissione, inizio e fine esecuzione (come negli esempi visti a lezione)

Riferimenti

Documenti correlati

Il laboratorio di Informatica del Polo Marzotto è utilizzato da tre tipi di utenti, studenti, tesisti e professori ed ogni utente deve fare una richiesta al

• Si deve definire un task che estenda l’interfaccia Callable, e che, ricevuto come parametro un nome simbolico, provvede a tradurre il nome ritornando un InetAddress..

• Modificare il codice del Sender in modo che esso usi due sockets diversi per inviare lo stesso messaggio a due diversi receivers. Mandare in esecuzione prima i

• Il metodo run della classe di libreria Thread definisce l’insieme di statement Java che ogni thread (oggetto della classe) eseguirà.. concorrentemente con gli

•  Per attivare il thread deve essere chiamato il metodo start() che invoca il metodo run() (il metodo run() non può essere. chiamato direttamente, ma solo

implementazione del concetto di monitor: un oggetto java è associato ad un mutex ricorsivo tramite il quale è possibile disciplinare gli accessi da parte di diversi thread allo

 La funzione DEVE ESSERE CHIAMATA su una variabile mutex che sia già bloccata e di proprietà del thread chiamante. In tal caso la funzione pthread_mutex_unlock sblocca la

▪ Assegnare memoria e risorse per la creazione di nuovi processi è oneroso; poiché i thread condividono le risorse del processo cui appartengono, è molto più con- veniente creare