STM in Clojure

 Transactional memory in Clojure is implemented using Multiversion
Concurrency Control protocol

http://en.wikipedia.org/wiki/Transactional_memory

http://en.wikipedia.org/wiki/Multiversion_concurrency_control

MVCC is the concurrency protocol used in many mainstream database systems
including Oracle, Sybase, PostgreSQL, IBM DB2, Microsoft SQL Server, and
MySQL/InnoDB.

"write skew anomaly" can happen in case of MVCC because MVCC makes a copy
of the isolated transaction status,
see http://en.wikipedia.org/wiki/Snapshot_isolation for a good example, and
also http://www.blogjava.net/killme2008/archive/2010/08/archive/2010/07/archive/2010/07/archive/2010/07/17/326362.html

good articles on Agent implementation in Clojure:

http://www.blogjava.net/killme2008/archive/2010/07/archive/2010/07/19/326540.html

http://www.blogjava.net/killme2008/archive/2010/07/30/327606.html

时间: 2024-12-29 04:07:18

STM in Clojure的相关文章

理解Clojure STM 软件事务性内存

翻译说明: 英文原文来自:http://java.ociweb.com/mark/stm/article.html 原文包含了一些非STM的知识,也包括STM底层实现的内容,这里只是翻译了STM抽象层的内容,自认为这部分比较重要. 翻译是基于自己能够理解的方式翻译的,并非逐句翻译,目的是理解STM,理解如何调优STM,有逐句翻译强迫症的同学请不要喷我! 本人是在学习<Clojure编程乐趣>的"压力之下的 Ref"章节,遇到无法理解minHistory和maxHistory

Clojure数据分析秘笈 笔记

Clojure数据分析秘笈 目录 1 导入分析数据 2 清洗和校验数据 3 使用并发编程管理复杂度 4 使用并行编程提高性能 5 Cascalog 6 使用Incanter数据集 7 使用Incanter准备并执行数据分析 8 使用Mathematica和R 9 聚类.分类和使用Weka 10 使用Incanter绘图 11 创建网页图表 导入分析数据 $ lein new getting-data 从CSV 从JSON 使用Incanter 从JDBC 从XML 利用zipper浏览XML结构

STM 软件事务内存——本质是为提高并发,通过事务来管理内存的读写访问以避免锁的使用

对Java程序员来说,我们对面向对象的编程(OOP)自然都是烂熟于胸的,但语言也极大地影响了我们构建面向对象应用程序的方式.(现在的OOP已经和Alan Kay当初创造这个词时候的初衷大不相同了,他的主要思想是采用消息传递并消灭所有状态数据(他认为,系统是由一些类似于生物细胞那样的对象构成的,这些对象通过消息传递进行通信,且无需持有任何状态)--go语言) 对于Java程序员来说,当我们顺着指针或引用找到某个实例的时候,实际上是登录到了持有其状态的一块内存上,于是在那个位置上操纵数据也就成了自然

Clojure上手

Clojure,这是什么鬼?一门基于JVM(现在也有基于.NET CLR的了:Clojure CLR) 的函数式编程语言.在JVM平台运行的时候,会被编译为JVM的字节码进行运算..为什么要学它?其设计思想独特.有何先进独特之处?后面我会讲. 说实话,现在编程语言满天飞,哥也只是玩过C/C++/Basic/C#/javascript/Java/Python,,哥最喜欢的语言么?看平台了.Windows是C#,跨平台Java,脚本Python.其它的,比如: “最纯的函数式语言”Haskell.“

Programming Clojure笔记之五——状态

在Clojure中,几乎任何事物都是一个值(value). 状态(State)就是一个identity在某个时间点的值. 对于identity,在Clojure中提供了四种引用类型. Refs,对共享状态以coordinated,synchronous方式进行更改 Atoms, 对共享状态以uncoordinated,synchronous方式进行更改 Agents,对共享状态以asynchronous方式进行更改 Vars,管理线程局部状态. Ref和软事务内存(Software Transa

[转载] 详述三种现代JVM语言--Groovy,Scala和Clojure

转载自http://www.tuicool.com/articles/jYzuAv和http://www.importnew.com/1537.html 在我与Martin Fowler曾经合作呈现的一次主题演讲中,他作出了一个有洞察性的观点: Java的遗产将是平台,而不是程序设计语言. Java技术的原始工程师们作出了一个明智的决定,就是将编程语言与运行时环境分开,最终这使得超过200种语言能够运行在Java平台上.这种架构对于该平台的长期活力是至关重要的,因为计算机程序设计语言的寿命一般都

Clojure语言十三: 宏

micro的核心作用 由于micro接收的参数可以很复杂,而且不求值,因此可以接收list,在内部转换,加工后执执行,也可以接收完全不是lisp的语法,在内部转换成clojure能执行的list. 这样可以创建自己的DSL,而把clojure宏实现为DSL解析器. micro与function的区别 特点是允许在Clojure evaluate你的list之前,你能够像处理函数一样的处理它, 但是不evaluate. 如果你想把一个表达式作为参数传递给函数,并要求这个参数不求值,这是做不到的.比

Scala vs. Groovy vs. Clojure

http://stackoverflow.com/questions/1314732/scala-vs-groovy-vs-clojure Groovy is a dynamically typed language, whose syntax is very close to Java, with a number of syntax improvements that allow for lighter code and less boilerplate. It can run throug

Clojure学习资料

以下大部分收藏自博客:http://blog.csdn.net/ithomer/article/details/17225813 官方文档: http://clojure.org/documentation API-Index * 中文资料(强烈推荐): 1. clojure入门教程  *http://xumingming.sinaapp.com/302/clojure-functional-programming-for-the-jvm-clojure-tutorial/ 2. clojure