`
softstone
  • 浏览: 480717 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

在Erlang程序里处理状态

阅读更多
(原文见我的透明思考

从题外话说起:据我亲身经历,很多令人郁结的程序员最大的问题不是不熟悉语 言和类库,不是不了解算法,不是不会用工具,而是对程序里的信息流没有概念——弄不清哪些信息应该在什么地方、信息从哪里来、经过怎样的转换、到哪里去。 而顺序化编程语言(C、C++、Java、C#……)很大程度上加重了这个毛病:在一些不那么漂亮的代码里经常可以看到被滥用的static方法和变量, 说到底还是不恰当的全局变量的延续,说到底还是没弄清楚哪些信息应该在哪些位置出现。

而Erlang的编程练习对此很有帮助。没有全局变量,变量赋值后就不能改变。于是一些常见的bad smell自然而然地就不会出现了,一些常用的重构手法自然而然地就用不上了。不过呢,这个世界毕竟是有状态的。比如说一个Stomp server就需要记住哪个client订阅了哪个频道。于是当你认真思考“什么信息应该在什么地方”这个问题时,Erlang的几种选择就显得很有意思了。

参数传递。只有当你认真思考的时候,你才会发现原来很多信息都是很容易得到的。要控制一个函数的行为,最简单也最常用的办法就是改变传递给它的参数。如果这个函数需要一种新的状态,也许那意味着给它增加一个参数。

进程字典 。调用putget方法可以把信息放入一个“每个进程一个实例”的字典。例如random 在字典里放了一个名叫random_seed的变量,用来生成伪随机数。

ETS 。同样是一张二维表,ETS里的信息是所有进程都能访问的。例如Stomperl 需要记录哪个client订阅哪个mailer进程,显然所有监听socket的进程都需要了解这个订阅信息,才能正确分发消息。于是订阅信息就应该(至少)在ETS里保存。

DETS 。ETS只在内存中存在,这意味着两件事:第一,程序结束数据就消失;第二,数据只能在一个节点共享。DETS的API和ETS相似,但它是基于文件的,所以持久保存和多节点共享都是题中应有之义。注意,ETS和DETS保存的数据都必须是tuple。

Mnesia 。这是一个真正的数据库。功能齐备,并且仍然软实时。

以上四种方式的排列不是随机的。应该首先考虑靠前的手段,如果有明确的理由表明一种手段不能满足需要时才可以考虑比较靠后的手段。这很费脑子,有时让人沮丧。但经过深思熟虑的程序好过不假思索的程序,发现自己犯错好过犯错而不自知。

 
分享到:
评论

相关推荐

    erlang程序设计相关例子程序

    通过对这些文件名的分析,我们可以看出这些Erlang程序涵盖了并发处理、进程通信、异常处理、服务器设计、数据处理和测试等多个方面,体现了Erlang在构建分布式系统中的强大功能。学习并理解这些示例,对于深入掌握...

    Erlang程序设计,包含完整目录和全套源码

    在Erlang程序设计的学习中,你将接触到以下关键概念: 1. **模式匹配**:Erlang的函数定义允许根据参数模式进行匹配,这是一种强大的语法特性,用于数据解构和条件分支。 2. **列表解析**:Erlang的列表解析提供了...

    erlang程序设计与入门

    **Erlang程序设计与入门** ...通过阅读《Erlang入门手册》和《Erlang程序设计》这两本书,你可以深入了解Erlang的基础知识、编程技巧以及最佳实践,从而在函数式编程和并发系统的世界里游刃有余。

    [Erlang程序设计]源代码

    在这些源代码中,你可以看到如何通过函数来构建程序,以及如何利用函数式编程的特性实现高效的数据处理和状态管理。例如,Erlang的列表处理函数(如`hd/1`, `tl/1`, `length/1`, `map/2`等)在代码中的广泛应用,...

    Erlang程序设计中文版

    在"Erlang程序设计中文版"这本书中,读者可以深入理解Erlang的核心概念和技术,从而掌握利用Erlang进行高效软件开发的技能。 1. **函数式编程**:Erlang是函数式编程语言的代表之一,它强调通过函数而不是变量状态...

    Erlang程序设计及源码

    本资源包含了一本Erlang程序设计的入门经典书籍及其配套源码,适合初学者深入理解Erlang编程。 1. **Erlang简介** Erlang以其强大的并发处理能力而闻名,它采用了轻量级进程模型,使得在单个系统中可以同时运行...

    Erlang程序设计及源代码打包

    **Erlang程序设计概述** Erlang是一种面向并发的、函数式的编程语言,由瑞典电信设备制造商Ericsson开发,主要用于构建高可用性、容错性强的分布式系统。《Erlang程序设计》这本书,作者是Joe Armstrong,他是...

    Erlang程序设计中文版(完整书签).pdf

    在《Erlang程序设计》中,你还会了解到Erlang的类型系统,尽管它是动态类型的,但Erlang提供了类型注解来增强代码的可读性和可维护性。你还将学习Erlang的模式匹配,这是一种强大的语法特性,用于解构数据结构并根据...

    erlang程序设计

    在深入探讨Erlang程序设计之前,我们先来了解一下Erlang的基础概念。 1. 函数式编程:Erlang是一种纯函数式编程语言,这意味着函数不具有副作用,它们仅根据输入产生输出,不改变外部状态。这种特性使得代码更容易...

    编写分布式的Erlang程序:陷阱和对策

    在探讨编写分布式的Erlang程序时,本篇文章聚焦于Erlang编程语言中的分布式特性,尤其是那些容易忽视的陷阱及其对应的解决方案。Erlang作为一种专为构建高度并发、容错性强的分布式系统的编程语言,其特性非常适合...

    Erlang程序设计第2版附书代码

    在深入理解Erlang程序设计第2版的附书代码之前,我们先来了解一下Erlang的基本概念和特性。 1. **并发与并行**:Erlang的并发模型基于轻量级进程(Lightweight Processes, LWP),这些进程具有独立的执行路径,可以...

    erlang程序设计第二版课后习题答案(精简版).zip

    《Erlang程序设计第二版》是一本深入探讨Erlang编程语言的书籍,它旨在帮助读者掌握Erlang的核心概念和技术,以实现高并发、容错性和分布式系统的开发。课后习题是学习过程中不可或缺的一部分,它们能够检验并巩固...

    erlang程序设计(第二版)随书源码

    通过深入研究《Erlang程序设计(第二版)》的随书源码,你可以逐步掌握这些关键知识点,并提升在实际项目中应用Erlang的能力。这个源码包“code”很可能是按照章节或主题组织的,每个文件或目录代表一个特定的概念或...

    Erlang游戏程序学习完整PDF手册

    这份"Erlang游戏程序学习完整PDF手册"是一份全面介绍Erlang在游戏开发中应用的学习资料,包含了Erlang的基础知识、并发原理以及在游戏开发中的实践案例。 Erlang语言的设计理念源自于Ericsson公司为解决电信系统中...

    Erlang程序设计.pdf

    根据提供的信息,我们可以推断出该文档主要涉及的是Erlang程序设计的相关内容。下面将对Erlang语言的基础概念、特点以及程序设计中的关键知识点进行详细的阐述。 ### Erlang语言简介 Erlang是一种通用的、并发的、...

    erlang 语言程序设计

    正如书中引用Joe Armstrong(Erlang语言的主要设计者之一)的话:“Erlang程序模拟了我们思考和互动的方式。”这意味着Erlang的设计原则与现实世界中的对象行为相一致,通过编写能够并行运行的程序来模拟现实世界的...

    《Erlang程序设计》源码

    《Erlang程序设计》是一本深入探讨Erlang编程语言的书籍,其源码包含在提供的压缩包中。Erlang是一种并发性极强、适用于构建分布式系统和实时软实时系统的函数式编程语言。该书通过源码实例,帮助读者理解和掌握...

    erlang编程 Introducing Erlang

    Erlang采用“let it crash”哲学,鼓励程序在遇到错误时立即崩溃,而不是尝试恢复。这样可以快速暴露问题,便于系统自我修复。Supervision树(Supervisor Trees)是处理故障的一种机制,它能自动重启失败的进程。 #...

Global site tag (gtag.js) - Google Analytics