Che cos'è la memoria transazionale?
Nel software, lo schema della memoria transazionale è un corso d'azione per la programmazione multithread che utilizza transazioni simili a quelle utilizzate da un database. Quando due o più thread tentano di accedere agli stessi dati contemporaneamente, molte situazioni indesiderate diverse possono comportare casi in cui il risultato di un programma dipende dall'ordine di accesso al thread. Di solito, si desidera un ordine e nel multithreading i blocchi sono il modo più semplice e predominante per garantire che solo un singolo thread abbia accesso a una risorsa specifica alla volta.
Questo approccio alla memoria transazionale contiene molteplici problemi per quanto riguarda i blocchi nel multithreading. Un blocco può diventare permanente se si verifica un tipo di errore imprevisto e i blocchi possono causare problemi imprevedibili con la concorrenza, come deadlock o inversione di priorità. A causa del fatto che i blocchi sono molto dettagliati, un altro problema include il codice che finisce per passare la maggior parte del tempo tra blocco, cambio di contesto e sblocco. Questo è un problema cruciale perché può portare il codice a dedicare più tempo a queste azioni che a svolgere altri importanti lavori nel programma. Al contrario, i blocchi a grana grossa possono causare una riduzione delle prestazioni di elaborazione e una minore concorrenza.
I problemi nella memoria transazionale sono risolti da blocchi avanzati, tra cui "blocco blocco" da C #, blocchi lettura-scrittura, barriere di scrittura, ecc. Una delle priorità principali per quanto riguarda la memoria transazionale è quella di non avere blocchi e tempi di elaborazione dei blocchi non necessari . Di solito si concorda che una struttura di dati condivisa è priva di blocchi se le sue operazioni non richiedono l'esclusione reciproca. 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 concorrenti.
Il modello Transactional Memory Coherence and Coistence (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 coerenza del riferimento di memoria. Il modello TCC semplifica anche il software parallelo eliminando la sincronizzazione che utilizza blocchi standard o semafori. Tramite l'hardware, TCC combina inoltre tutte le scritture provenienti da ciascuna regione dell'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 una completa eliminazione di determinati protocolli di coerenza standard.