Pergunta

Eu estive lendo muito sobre a memória transacional recentemente. Há um pouco de hype em torno TM, então um monte de pessoas estão entusiasmados sobre isso, e ele fornece soluções para problemas dolorosos com bloqueio, mas você regularmente ver também queixas:

  • Você não pode fazer I / O
  • Você tem que escrever suas seções atômicas para que eles possam executar várias vezes (ter cuidado com as suas variáveis ??locais!)
  • Software ofertas de memória transacional mau desempenho
  • [Insira sua implicância aqui]

Eu entendo essas preocupações: mais frequentemente do que não, você encontrará artigos sobre STM que só funcionam com algum hardware específico que suporta alguns operação atômica realmente bacana (como LL / SC ), ou ele tem de ser apoiado por algum compilador imaginário, ou exige que todas acessos memória ser transacional, introduz tipo restrições mônada de estilo, etc. E acima de tudo:. estes são problemas reais

Isto levou-me a perguntar-me:? o que fala contra o uso local de memória transacional como um substituto para fechaduras Será que esse valor já chega trazer, ou memória transacional deve ser utilizado em todo o lugar se usado em tudo?

Foi útil?

Solução

Sim, alguns dos problemas que você menciona pode ser reais agora, mas as coisas evoluem. Como qualquer nova tecnologia, primeiro há um hype, em seguida, os novos programas de tecnologia que existem alguns problemas não resolvidos, e então alguns destes problemas são resolvidos e outros não. Este resultado em outra possibilidade para resolver seus problemas, para os quais esta tecnologia é a mais adequada.

Eu vou dizer que você pode usar STM para uma parte do seu aplicativo que pode deixar com as restrições do estado correntes da arte têm. Parte da aplicação que não se importa cerca de uma perda de eficiência por exemplo.

A comunicação entre a transação e partes não transacionais é o grande problema. Há STM que são bloquear conscientes, então eles podem interagir de uma maneira consistente com partes não transacionais.

E / S também é possível, mas sua transação torna-se irrevogável, ou seja, não pode ser abortada. Isso significa que apenas uma transação pode usar I / O, ao mesmo tempo. Você também pode usar I / O, uma vez a transação nível superior tem sucesso, em um mundo não-transacional, como agora.

A maioria dos sistemas de bases de biblioteca STM forçar o usuário a fazer a diferença entre os dados transacionais e não transacionais. Então, sim, você precisa entender o que isso significa exatamente. Por outro lado, os compiladores pode-se deduzir que o acesso deve ser transacional ou não, o problema foi que eles podem ser muito conservador, diminuindo a eficiência que podemos obter quando conseguimos explicitamente a diferentes tipos de variáveis. Este é o mesmo que ter variáveis ??estáticas, locais e dinâmicos. Você precisa saber as limitações de cada um tem que fazer um programa correto.

Outras dicas

Eu estive lendo muito sobre a memória transacional recentemente.

Você pode também estar interessado neste podcast sobre software de memória transacional, que também introduz STM usando uma analogia com base na coleta de lixo:

O papel é sobre uma analogia entre a coleta de lixo e memória transacional. Além de ver a beleza da analogia, a discussão também serve como um bom introdução à memória de transacção (que foi mencionado no episódio Goetz / Holmes) e - até certo ponto -. a coleta de lixo

Se você usar a memória transacional como um substituto para fechaduras, todo o código que executa com que bloqueio mantido poderia ser revertida após a conclusão. Assim, o código que foi anteriormente usando fechaduras deve ser transacional, e terá os mesmos inconvenientes (e benefícios).

Então, o que poderia restringir a influência do TM somente àquelas partes do código que os bloqueios de espera, certo? Cada pedaço de código que pode ser chamado durante um bloqueio mantido deve suportar TM, nesse cenário. Quanto de seu programa não mantêm bloqueios e nunca é chamado pelo código que mantém bloqueios?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top