Domanda

Ho letto un sacco sulla memoria transazionale ultimamente. C'è un po 'di hype intorno TM, così un sacco di gente è entusiasta, e lo fa fornire soluzioni per i problemi dolorosi con bloccaggio, ma è regolarmente vedere anche le denunce:

  • Non si può fare di I / O
  • Devi scrivere le sezioni atomiche in modo da poter eseguire più volte (attenzione con le variabili locali!)
  • Software memoria transazionale offre prestazioni poveri
  • [Inserisci il tuo piccolo cruccio qui]

Capisco queste preoccupazioni: il più delle volte, a trovare articoli su STM che girano solo su alcuni particolari hardware che supporta alcune operazioni atomica davvero ingegnoso (come LL / SC ), oppure deve essere supportato da alcuni compilatore immaginaria, o si richiede che tutti accessi la memoria sia transazionale, introduce vincoli di tipo monade in stile, ecc E soprattutto:. questi sono problemi reali

Questo mi ha portato a chiedere a me stesso: quello che parla contro l'uso locale della memoria transazionale in sostituzione di serrature Sarebbe questo già portato abbastanza valore, oppure deve memoria transazionale essere utilizzato in tutto il posto se? utilizzato a tutti?

È stato utile?

Soluzione

Sì, alcuni dei problemi che si possono ricordare quelli veri ora, ma le cose si evolvono. Come ogni nuova tecnologia, prima c'è una montatura, allora la nuova tecnologia dimostra che ci sono alcuni problemi irrisolti, e poi alcuni di questi problemi sono risolti e altri no. Questo risultato in un'altra possibilità di risolvere i vostri problemi, per i quali questa tecnologia è il più adatto.

devo dire che è possibile utilizzare STM per una parte della vostra applicazione che può lasciare con i vincoli dello stato correnti dell'arte hanno. Parte della domanda che non mente di una perdita di efficacia, per esempio.

La comunicazione tra la transazione e parti non transazionali è il grande problema. Ci sono STM che sono a conoscenza di blocco, in modo da li possono interagire in modo coerente con le parti non transazionali.

I / O è anche possibile, ma la transazione diventa irrevocabile, cioè, non può essere interrotta. Ciò significa che solo una transazione può utilizzare I / O allo stesso tempo. È inoltre possibile utilizzare I / O una volta che la transazione di livello superiore ha successo, su un mondo non transazionale, come ora.

La maggior parte dei sistemi di base libreria di MCS obbligare l'utente a fare la differenza tra dati transazionali transazionali e non. Quindi sì, è necessario capire che cosa questo significhi esattamente. D'altra parte, i compilatori può dedurre ciò che l'accesso deve essere transazionale o no, il problema stati che possono essere troppo conservatore, diminuendo l'efficienza che possiamo ottenere quando riusciamo esplicitamente i diversi tipi di variabili. Questo è lo stesso di avere variabili statiche, locali e dinamici. È necessario conoscere i vincoli ognuno deve fare un programma corretto.

Altri suggerimenti

  

Ho letto un sacco sulla memoria transazionale ultimamente.

Si potrebbe anche essere interessato a questo podcast sul software di memoria transazionale, che introduce anche STM usando un'analogia basata sulla raccolta dei rifiuti:

  

Il carta è di circa un'analogia tra la raccolta dei rifiuti e la memoria transazionale.   Oltre a vedere la bellezza del analogia, la discussione serve anche come una buona   introduzione alla memoria transazionale (che è stato menzionato nella puntata Goetz / Holmes)   e - in una certa misura -. per la raccolta dei rifiuti

Se si utilizza la memoria transazionale in sostituzione di serrature, tutto il codice che viene eseguito con quel blocco tenuta potrebbe eseguire il rollback al completamento. Così il codice che è stato precedentemente utilizzato serrature deve essere transazionale, e avrà tutti gli stessi inconvenienti (e benefici).

Quindi, si potrebbe limitare l'influenza di TM solo a quelle parti del codice che detengono serrature, giusto? Ogni pezzo di codice che può essere chiamato durante un blocco tenuto deve supportare TM, in questo scenario. Quanto del vostro programma non tenere serrature e non viene mai chiamato dal codice che contiene le serrature?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top