Programmazione concorrente

Programmazione concorrente (15)

Venerdì, 10 Luglio 2020 09:46

I thread in Python

Scritto da

I thread sono la naturale evoluzione delle tecniche di fork/join viste in queste pagine. Come ampiamente trattato sui manuali, il thread non condivide tutto il codice del processo che lo genera e non c'è quindi la necessità di selezionare gli opportuni percorsi nel codice tra processi padre/figlio. Il thread è più snello anche da creare e gestire, seppur con limiti. Vediamo come in Python.

Dato un vettore di 10 interi, dire se la somma degli elementi di posto pari è maggiore della somma degli elementi di posto dispari. Implementare il precedente algoritmo con una programmazione concorrente che preveda esattamente due sotto-processi in parallelo fornendo il grafo delle precedenze.

Mercoledì, 22 Maggio 2019 11:31

Esempio Fork/Join con due livelli figli

Scritto da

Vediamo un esercizio più articolato. Fino ad adesso abbiamo lavorato sempre con un solo livello di fork, ovvero un padre ed un figlio che inevitabilmente torna al ramo principale il proprio risultato parziale. Cosa accade se però un figlio dovesse sdoppiarsi nuovamente? Come possiamo risolvere questo problema?

Un esercizio riepilogativo complesso con più fork-join su diversi livelli. Il segreto per risolvere i diversi rami è sempre lo stesso. Il padre fa tranquillamente il suo percorso, mentre ognu figlio, che sia un singolo nodo o un intero ramo, deve tornare _exit() al relativo padre, qualunque sia il livello.

Lunedì, 13 Maggio 2019 11:11

Fork-join con grado di parallelismo 3

Scritto da

 Come possiamo eseguire in parallelo più di due operazioni visto il limite della chiamata fork() che è binaria padre/figlio? Ecco un esempio con la soluzione strategica per superare questa difficoltà.

Martedì, 26 Marzo 2019 21:00

Esercizio fork-join complesso

Scritto da

Dopo aver introdotto le principali chiamate per la gestione del fork-join, vediamo un esempio più complesso di processo con diversi figli che necessitano di join differenti.

Martedì, 19 Marzo 2019 23:12

Esercizi fork-join

Scritto da

Proviamo un altro esercizio con i costrutti fork-join. E' un esercizio sostanzialmente teorico: usiamo lo status di ritorno dal figlio per comunicare col processo padre, ma è una scelta che assolutamente non si adotta in programmi complessi con elaborazioni complesse. In questi ultimi casi, vedremo come utilizzare aree opportune di memoria condivisa.

Martedì, 19 Febbraio 2019 23:21

Il costrutto fork vs join

Scritto da

Tecnica mediante la quale possiamo suddividere un processo, come gia abbiamo fatto, e ricongiungerlo alla fine per usare i risultati calcolati.

Martedì, 19 Febbraio 2019 22:24

La chiamata waitpid()

Scritto da

Abbiamo gia visto in precedenza la chiamata wait(), come permetta ad un padre di attendere la terminazione dei suoi figli, in questo caso tutti che siano uno o più. Esiste anche una variante per cui si può forzare il padre ad attendere solo un determinato figlio di cui è noto il PID.

Martedì, 22 Gennaio 2019 22:36

La chiamata wait() in Python

Scritto da

Abbiamo visto, nelle esercitazioni precedenti, il comportamento non deterministico delle chiamate fork con l'esecuzione di figli, anche simulando codice con la chiamata time.sleep(). Il comportamento in questi casi è lasciato allo scheduler ma in molti casi, è consigliabile che il padre attenda l'esecuzione dei figli, magari per raccogliere i dati elaborati e usarli nel flusso principale.