Clojure并发编程与特性解析
1. 并发编程基础
在并发编程领域,不同的编程语言采用了不同的策略来处理可变状态。像Io和Scala使用基于参与者的模型,并提供不可变构造,让程序员无需可变状态就能解决问题;Erlang提供轻量级进程的参与者,以及允许有效监控和通信的虚拟机,实现了前所未有的可靠性。而Clojure采用了软件事务内存(STM)的方法。
1.1 引用(Refs)与事务内存
在Clojure中,引用(ref)是封装的数据,所有访问必须遵循特定规则以支持STM。不能在事务外更改引用。以下是操作引用的示例:
; 创建引用
user=> (ref "Attack of the Clones")
#<Ref@ffdadcd: "Attack of the Clones">
; 赋值引用
user=> (def movie (ref "Star Wars"))
#'user/movie
; 获取引用
user=> movie
#<Ref@579d75ee: "Star Wars">
; 获取引用的值
user=> (deref movie)
"Star Wars"
user=> @movie
"Star Wars"
; 尝试在事务外更改引用
user=> (alter movie str ": The Empire Strikes Back")
java.lang.IllegalStateException: No transaction running (NO_SOURCE_FILE:0)
; 在事务内更改引用
user
Clojure并发编程核心解析
超级会员免费看
订阅专栏 解锁全文
6

被折叠的 条评论
为什么被折叠?



