Ced*_*tin 6 concurrency function clojure
使用Clojure(和其他Lisp方言),您可以修改运行代码.那么,在运行时修改函数时,该更改是否可用于多个线程?
我试图找出它在并发设置中如何工作:如果有几个线程正在使用函数foo,当我重新定义(比如使用defn)函数foo时会发生什么?
必须进行一些同步:何时以及如何进行这种同步以及它的成本是多少?
在JVM上说,是使用volatile引用引用的函数吗?如果是这样,是否意味着每次都有"功能查找",那么必须支付volatile费用?
在Clojure中,函数是IFn类的实例,它们几乎总是存储在vars.vars是线程本地值的 Clojures机制.
binding哪个会给出自己的线程本地值,它们可以随意更改,因为没有其他线程可以读取它.对vars的一个很好的理解值得一点研究,一旦你习惯它们,它们是一个非常有用的并发设备.
ps:根线程通常是REPL pss:你当然可以自由地将你的函数存储在vars以外的东西中,例如你需要自动更新一组函数,尽管这种情况很少见.
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |