Pregunta

He estado leyendo mucho sobre la memoria transaccional últimamente. Hay un poco de bombo alrededor de TM, por lo que una gran cantidad de personas están entusiasmados con él, y proporciona soluciones para los problemas dolorosos con bloqueo, pero con regularidad también ver las quejas:

  • No se puede hacer de E / S
  • Usted tiene que escribir sus secciones atómicas para que puedan correr varias veces (tener cuidado con sus variables locales!)
  • memoria transaccional ofrece un rendimiento deficiente
  • [Inserte su motivo favorito de aquí]

Me entienden estas preocupaciones: más de las veces, a encontrar artículos sobre STM que sólo se ejecutan en un hardware especial que soporta una operación atómica muy ingenioso (como LL / SC ), o tiene que ser apoyado por algún compilador imaginaria, o se requiere que todos accesos a la memoria sea transaccional, introduce limitaciones de tipo de estilo mónada, etc. Y sobre todo:. estos son problemas reales

Esto me ha llevado a preguntarme: lo que hable contra el uso local de la memoria transaccional como un reemplazo de cerraduras ¿Esto ya llevar suficiente valor o debe transaccional de memoria puede utilizar por todo el lugar si? utilizado en absoluto?

¿Fue útil?

Solución

Sí, algunos de los problemas que se pueden mencionar los reales, pero las cosas evolucionan. Como toda nueva tecnología, primero hay un bombo, a continuación, la nueva tecnología muestra que hay algunos problemas sin resolver, y luego algunos de estos problemas se resuelven y otros no. Este resultado en otra posibilidad de resolver sus problemas, por lo que esta tecnología es la más adecuada.

Me gustaría decir que usted puede utilizar STM para una parte de la aplicación que puede dejar con las limitaciones del estado de las corrientes de la técnica tienen. Una parte de la aplicación que no les importa acerca de una perdida de eficiencia, por ejemplo.

La comunicación entre la transacción y partes no transaccionales es el gran problema. Hay STM que son conscientes de bloqueo, por lo que ellos pueden interactuar de una manera consistente con partes no transaccionales.

I / O también es posible, pero la transacción se hace irrevocable, es decir, no puede ser abortada. Esto significa que sólo una transacción puede utilizar I / O al mismo tiempo. También puede utilizar E / S una vez que la transacción de nivel superior tiene éxito, en un mundo no transaccional, como ahora.

La mayoría de los sistemas de bases de biblioteca STM forzar al usuario a hacer la diferencia entre los datos transaccionales transaccionales y no. Así que sí, es necesario comprender lo que esto significa exactamente. Por otro lado, los compiladores pueden deducir lo que el acceso debe ser transaccional o no, el problema sido que ellos pueden ser demasiado conservador, la disminución de la eficiencia que podemos conseguir cuando manejamos de manera explícita los diferentes tipos de variables. Esto es lo mismo que tener variables estáticas, locales y dinámicas. Lo que necesita saber las limitaciones de cada uno tiene que hacer un programa correcto.

Otros consejos

  

He estado leyendo mucho sobre la memoria transaccional últimamente.

Usted también puede estar interesado en este podcast en memoria transaccional, que también introduce STM usando una analogía basada en la recolección de basura:

  

El papel se trata de una analogía entre la recolección de basura y la memoria transaccional.   Además de ver la belleza de la analogía, la discusión también sirve como un buen   Introducción a la memoria transaccional (que se mencionó en el episodio Goetz / Holmes)   y - hasta cierto punto -. a la recolección de basura

Si utiliza la memoria transaccional como un reemplazo de cerraduras, todo el código que se ejecuta con el bloqueo mantenido podría ser revertido al finalizar. Así, el código que previamente estaba utilizando cerraduras debe ser transaccional, y tendrá todos los mismos inconvenientes (y beneficios).

Por lo tanto, lo que pueda restringir la influencia de TM a sólo aquellas partes del código que mantiene bloqueos, ¿verdad? Cada pieza de código que puede ser llamado durante un bloqueo que debe ser compatible con TM, en ese escenario. ¿Qué parte de su programa no se sostiene cerraduras y nunca es llamado por el código que mantiene bloqueos?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top