Che cos’è la memoria transazionale?

Nel software, lo schema della memoria transazionale è una linea di condotta per la programmazione multithread che utilizza transazioni molto simili a quelle utilizzate da un database. Quando due o più thread tentano di accedere agli stessi dati contemporaneamente, possono verificarsi diverse situazioni indesiderate nei casi in cui il risultato di un programma dipende dall’ordine di accesso del thread. Di solito, si desidera un ordine e nel multithreading, i blocchi sono il modo predominante e più semplice per garantire che solo un singolo thread abbia accesso a una risorsa specifica alla volta.

Questo approccio alla memoria transazionale contiene più problemi per quanto riguarda i blocchi nel multithreading. Un blocco può diventare permanente se si verifica un qualche tipo di errore imprevisto e i blocchi possono causare problemi imprevedibili con la concorrenza, come deadlock o inversione di priorità. Poiché i blocchi sono molto dettagliati, un altro problema include il codice che finisce per trascorrere la maggior parte del tempo tra il blocco, il cambio di contesto e lo sblocco. Questo è un problema cruciale perché può far sì che il codice spenda più tempo su queste azioni che su altre operazioni importanti nel programma. Al contrario, i blocchi a grana grossa possono causare una riduzione delle prestazioni di elaborazione e della concorrenza.

I problemi nella memoria transazionale sono risolti da blocchi avanzati, tra cui “blocco blocco” da C#, blocchi di lettura-scrittura, barriere di scrittura, ecc. Una delle priorità principali per quanto riguarda la memoria transazionale è quella di non avere blocchi e nessun tempo di elaborazione dei blocchi non necessario . Di solito si conviene che una struttura dati condivisa è priva di lock se non è richiesta l’esclusione reciproca dalle sue operazioni. Le strutture di dati condivise e prive di blocchi evitano i problemi comunemente associati alle tecniche di blocco standard se si trovano in sistemi altamente simultanei.

Il modello Transactional Memory Coherence and Consistency (TCC) è un nuovo modello proposto sulla memoria condivisa. Secondo il modello, le transazioni atomiche sono invariabilmente unità di base di quanto segue: lavoro parallelo, coerenza della memoria, comunicazione e consistenza del riferimento alla memoria. Il modello TCC semplifica inoltre il software parallelo eliminando la sincronizzazione che utilizza blocchi standard o semafori. Attraverso l’hardware, TCC combina anche ogni scrittura da ogni regione di occorrenza della transazione in un pacchetto per trasmettere atomicamente il pacchetto a uno stato di memoria condiviso in modo permanente. Oltre all’hardware di coerenza semplificato, ciò significa che è necessaria una riduzione dei messaggi a bassa dormienza e l’eliminazione completa di alcuni protocolli di coerenza standard.