《Clojure数据分析秘笈》——3.2节使用STM管理程序复杂度

简介:

本节书摘来自华章社区《Clojure数据分析秘笈》一书中的第3章,第3.2节使用STM管理程序复杂度,作者(美)Eric Rochester,更多章节内容可以访问云栖社区“华章社区”公众号查看

3.2 使用STM管理程序复杂度
Clojure并发特性的基础是它的STM系统。这基本上是将数据库事务的语义扩展至计算机内存中。
STM工作方式是使用ref函数标记由STM控制的内存位置。可以使用deref函数或者@宏在任意位置对那些内存位置进行反引用。但是仅能修改在dosync块内部引用的值。接着,当事务执行完毕后,STM执行检查。如果事务改变的引用被另一个事务修改,事务失败,并排队进行重试。然而,如果没有引用改变,事务成功并提交。
当在事务中时,如果在外部编程,这些值不会改变。一旦事务提交,使用ref-set或者alter对那些位置所做的修改将在程序块外可见。
警告:使用STM应该仅使用Clojure本地的不可变的数据类型。这听起来限制较大,但在实践中,它并不是个大问题:Clojure有一个丰富又灵活的数据类型集合。而且,我们应该限制在每个事务中所做的工作量。我们仅想将那些真正必须成功或失败的操作绑定在一起作为一个集合。
STM帮助管理复杂度,通过允许将整个处理过程按一种对最有意义的方式分解,然后并发执行这些过程。STM和不可变状态一起使得系统简单而又易理解。

相关文章
|
算法 大数据 数据挖掘
《Clojure数据分析秘笈》——导读
本节书摘来自华章社区《Clojure数据分析秘笈》一书中的目录,作者(美)Eric Rochester,更多章节内容可以访问云栖社区“华章社区”公众号查看
1469 0
|
4天前
|
机器学习/深度学习 数据挖掘 计算机视觉
python数据分析工具SciPy
【4月更文挑战第15天】SciPy是Python的开源库,用于数学、科学和工程计算,基于NumPy扩展了优化、线性代数、积分、插值、特殊函数、信号处理、图像处理和常微分方程求解等功能。它包含优化、线性代数、积分、信号和图像处理等多个模块。通过SciPy,可以方便地执行各种科学计算任务。例如,计算高斯分布的PDF,需要结合NumPy使用。要安装SciPy,可以使用`pip install scipy`命令。这个库极大地丰富了Python在科学计算领域的应用。
9 1
|
5天前
|
数据可视化 数据挖掘 Python
Python中数据分析工具Matplotlib
【4月更文挑战第14天】Matplotlib是Python的数据可视化库,能生成多种图表,如折线图、柱状图等。以下是一个绘制简单折线图的代码示例: ```python import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] plt.figure() plt.plot(x, y) plt.title('简单折线图') plt.xlabel('X轴') plt.ylabel('Y轴') plt.show() ```
9 1
|
5天前
|
数据采集 SQL 数据可视化
Python数据分析工具Pandas
【4月更文挑战第14天】Pandas是Python的数据分析库,提供Series和DataFrame数据结构,用于高效处理标记数据。它支持从多种数据源加载数据,包括CSV、Excel和SQL。功能包括数据清洗(处理缺失值、异常值)、数据操作(切片、过滤、分组)、时间序列分析及与Matplotlib等库集成进行数据可视化。其高性能底层基于NumPy,适合大型数据集处理。通过加载数据、清洗、分析和可视化,Pandas简化了数据分析流程。广泛的学习资源使其成为数据分析初学者的理想选择。
10 1
|
8天前
|
Python 数据挖掘 存储
Python 数据分析(PYDA)第三版(七)(4)
Python 数据分析(PYDA)第三版(七)
30 1

热门文章

最新文章