29 lines
1.6 KiB
Markdown
29 lines
1.6 KiB
Markdown
|
# Programmazione Concorrente
|
||
|
|
||
|
## Specifica della Concorrenza (pre-thread)
|
||
|
|
||
|
Vari modi di esprimere la concorrenza: (vedi slides per esempi)
|
||
|
(ordine circa cronologico, dal piu' vecchio)
|
||
|
|
||
|
* fork / join : non molto leggibili, molto flessibili, basso livello
|
||
|
|
||
|
* cobegin / coend : approccio modulare contenente un "blocco" di codice parallelo, di piu' facile gestione. >Tutte le istruzioni all'interno del blocco sono eseguite in parallelo, e possono contenere strutture cobegin/coend. Facile lettura, ma molto vincolante: e' molto difficile avere informazioni sullo stato del programma all'interno del blocco begin/end.
|
||
|
|
||
|
* processo : unita' parallele identificate da parola chiave (*process* in Pascal, *task* in ADA). Sono moduli contenenti un body che viene eseguito in parallelo. Si puo' usare in concomitanza a cobegin/coend.
|
||
|
|
||
|
### Differenza tra Processi SO e processi di Linguaggi Concorrenti
|
||
|
|
||
|
Nel kernel, ogni processo ha un nome, occupa una certa quantita' di memoria, viene eseguito da un linuguaggio sequenziale. Un linguaggio concorrente, al contrario, a un programma puo' associare piu' task (creati dalle primitive, all'interno della runtime del linguaggio). Il SO (kernel) vedra' comunque ogni programma come unico processo di sistema.
|
||
|
|
||
|
(vedi slides per schemi)
|
||
|
|
||
|
## Processi e Thread
|
||
|
|
||
|
I processi possono essere caratterizzati in processi *leggeri* (thread) e classici. (vedi slides per ripasso sui thread)
|
||
|
(vedi slides per confronto SO/concorrenza)
|
||
|
|
||
|
## Simulazione di Programmi Concorrenti
|
||
|
|
||
|
Un simulatore di concorrenza controlla l'interleaving di azioni atomiche di un programma concorrente. (BACI, jBACI, SPIN)
|
||
|
|