本节书摘来自华章社区《clojure数据分析秘笈》一书中的第3章,第3.1节引言,作者(美)eric rochester,更多章节内容可以访问云栖社区“华章社区”公众号查看
第3章
使用并发编程管理复杂度
3.1 引言
设计和创建一个计算机系统是一个均衡行为:不断地添加特性和功能并保持代码简单和系统性能合理。数据分析系统也是如此。事实上,数据分析系统问题更糟糕。通常而言,数据只是部分一致,在开始分析之前需要采取多种策略来抽取有用数据。
这会导致问题失控。
clojure中也有并发消息处理系统—构建于stm之上的agent。agent包含状态信息,通过向其发送函数消息来并发更新状态。stm与agent一起提供了一种将程序设计为可维护且易理解结构的方式。
之所以这些都起作用是因为所有的本地clojure数据结构都是不可变的。它们不能被改变。由于处理不可变数据,尽管在高并发的环境下stm也可以保证其事务的一致性和安全性。这些保证很有用,因为它们可以帮助我们分析并解释数据和程序,并且帮助管理正在构建的系统的复杂性。
需要注意的是,并发(concurrent)描述了程序按什么样的架构来工作。每个进程可能做不同的事情。人们期望并发会提升速度,但是并发通常只是组织程序、将涉及不同任务的程序的各个组成部分分离并去耦合的一种好方式。如果你不停地做同一件事情并且想做得更快,那就是并行(parallelism)。我们将在第4章中学习与其相关的方法。