Según tengo entendido, existen varios algoritmos diferentes para implementar la memoria transaccional de software (y esta es un área de investigación bastante activa). ¿Dónde puedo encontrar (sin tener que bucear en el código fuente) que se utilizan en diferentes idiomas y bibliotecas, particularmente en Clojure y Haskell (GHC)?¿Qué algoritmos se utilizan en Clojure, Haskell (y otros idiomas) para STM?
Respuesta
El último recurso en la STM de Clojure - aparte del código en sí mismo - es el artículo Software Transactional Memory por Mark Volkmann.
Presenta una breve descripción de alto nivel de STM-the-approach (en comparación con otros enfoques de concurrencia), resume las diversas características de concurrencia disponibles en Clojure, luego se sumerge en CMOure's STM, describiendo exactamente lo que sucede durante una transacción y en última instancia yendo al nivel de las clases individuales involucradas. Además de ofrecer mucha información sobre el funcionamiento interno de la maquinaria STM de Clojure, contiene un buen número de observaciones muy perspicaces relacionadas con las características orientadas a la concurrencia de Clojure, ya que se utilizan en programas idiomáticos de Clojure.
El punto de entrada real a los recursos de STM de Mark es this page, que actualmente incluye algunas diapositivas de STM además del enlace a la última versión del artículo principal de STM.
Ver http://www.haskell.org/haskellwiki/Software_transactional_memory para Haskell (y GHC), y http://clojure.org/concurrent_programming para Clojure.
Creo que GHC viene con una biblioteca STM, y hay algunas técnicas para STM en Clojure.
Para otros idiomas, ver http://en.wikipedia.org/wiki/Software_transactional_memory#Implementations
En un nivel muy alto, algo que es interesante acerca de la implementación de STM de Clojure es que es muy diferente de todas las demás implementaciones. Rich ha mirado mucho más hacia las bases de datos reales de alto rendimiento del mundo real que los artículos académicos sobre los STM hipotéticos. Por ejemplo, el STM de Clojure es, por lo que yo sé, el único STM que usa Multi Version Concurrency Control (MVCC), que es una técnica bien conocida en el mundo de las bases de datos (de hecho, no hay ninguna base de datos seria, que doesn ' t usa MVCC) pero prácticamente no se discute en el mundo de STM.
En este momento, todavía no hay una buena comparación entre los diversos algoritmos/implementaciones de STM. Entonces sí, son bastante distintos. Y podemos hablar sobre qué semántica es la más natural. Pero no tenemos ninguna base fuera de la predisposición para decir que MVCC es mejor/peor que cualquier otra técnica de implementación en términos de eficiencia. * Podemos * observar que MVCC expone la posibilidad de escritura sesgada, que las implementaciones que conservan la semántica genuinamente serializable no lo hacen. (Aunque hay formas de trabajar en contra de esto también). – sclv
- 1. ¿En qué se diferencia Clojure STM de Haskell STM?
- 2. StyleCop para otros idiomas
- 3. ¿Para qué se utilizan java.awt.Component.getName() y setName()?
- 4. MFMailComposeViewController en otros idiomas?
- 5. js ¿Adelante para otros idiomas?
- 6. ¿Con qué idioma compilan otros idiomas?
- 7. ¿Por qué los identificadores List y String se llaman "xs" (en Scala y en otros idiomas)?
- 8. Usar los tipos de Haskell para reemplazar afirmaciones o verificaciones en otros idiomas
- 9. ¿Para qué se utilizan parches en SVN?
- 10. atoi() con otros idiomas
- 11. Ruby On Rails: pluralizar para otros idiomas
- 12. ¿Experiencias con Clojure STM para grandes conjuntos de datos?
- 13. ¿Para qué se utilizan las declaraciones dispinterface?
- 14. ¿Para qué se utilizan los componentes fuertemente conectados?
- 15. ¿Para qué se utilizan session_id, session_regenerate_id y session_name?
- 16. JavaScript: ¿Para qué se utilizan .extend y .prototype?
- 17. ¿Cómo se escriben algoritmos de programación dinámica eficientes en Haskell?
- 18. ¿Cómo se maneja la fecha de Javascript en otros idiomas?
- 19. Haskell: hilo bloqueado indefinidamente en una transacción STM
- 20. filtro SPARQL lang 'en' ofrece otros idiomas
- 21. ¿Por qué no se utilizan los archivos PHP para (personalizado) CSS y JS?
- 22. Clojure STM (dosync) x bloque de sincronización de Java
- 23. función de comprobación de Haskell STM devolviendo undefined
- 24. hay una API para GIT (C++ u otros idiomas)
- 25. "Teach" Python otros idiomas (TTS hablando ...) ¿Cómo?
- 26. ¿Para qué se utilizan los diferentes directorios en @INC?
- 27. ¿Para qué se utilizan los diferentes formatos de archivo gettext?
- 28. Concurrencia al estilo de Erlang para otros idiomas
- 29. Haskell to Clojure
- 30. ¿Para qué se utilizan los archivos .rc2 en Visual Studio?
¡Gracias! Ese es el tipo de información que estaba buscando (y esa página contiene una explicación muy clara de Clojure STM BTW). – Jay