`
wj2me
  • 浏览: 12740 次
  • 性别: Icon_minigender_1
  • 来自: 杜塞尔多夫
最近访客 更多访客>>
社区版块
存档分类
最新评论

Erlang程序中race condition的发现讲座小记

阅读更多
因为是针对Erlang所以这里race condition就是指message passing的部分,因为Erlang里边没有共享内存,而相互之间只能通过发送消息,而通常来说认为,发送消息很快速,基本这边一发,另外一边就收到了,有点类似于传统thread共享内存时候的感觉,就是很短暂,普通的时候不容易发现错误,所以有了这么个PULSE的项目。

例子就是,就是维持一个counter有read,write的方法,同时,如果有一个incr的函数,作为atomic的,就没得讲了,但是如果incr也只是简单的通过read再update之后write回去的方法,就不见得是atomic的了,这里也是故意这么加入的,达到故意有一个race condition的效果,然后演示如何用PULSE来发现这种bug的过程。

使用的是eqc_par_statem不过现在基本已经合并到了eqc_statem当中了。有几点就是声明并行比较难,但是串行相对容易,在后来euc的讲座中,John提到了,总有一种串行出来的方法来达到验证系统状态。然后启动几个clients随机的顺序执行,然后来测试。

对于incr的解释,因为是用read和write组合实现的,所以有interleaving的过程,运行你一会儿,运行我一会儿的。quickcheck的话,最开始能够发现这种错误,由于很多的大量混在一起,但是很难重现。

所以引出了PULSE的项目,PULSE主要是替代了Erlang自己本身的schedular,使用一种random的scheduling并且preemtpy抢占更频繁,更容易发现错误,而且可以log整个的过程,所以可以过后分析,重复。可以参考另外thomas的论文,就是trace一个Erlang程序的那个文章。

用了PULSE能产生一个图形,表示了两个进程的,但是怎么去解读这个图,还需要学习,首先需要明白怎么产生这个图。

PULSE的设计,不用解释器,只是普通的Erlang代码,不用hook到Erlang的vm当中,只是instrumented code加上额外的一个scheduler process,这样就可以控制processes之间交互发送消息的过程。有点类似于cover的道理感觉,可以看看cover是怎么工作的,感觉应该就是这个道理,就是每一次的调用,都被一个额外的人监控到了。对于PULSE的例子,就是schedular可能会停下来某一个进程,通过让该进程给schedular发消息,等回复,就是John在euc讲的i'm ready to run的道理。当实际的进程之间发送消息的时候,实际上是发送到了shceduler当中,作为一个中转,这样就可以达到故意延迟的目的,才能暴露这种message passing过程当中的race condition基本道理就跟我自己玩的时候加入点延迟道理差不多,不过我的延迟只能针对一个一个的语句,而这里message passing等于是在我看来的原子操作上再一次打碎,延迟。
0
0
分享到:
评论

相关推荐

    Erlang程序设计(第2版)1

    【Erlang程序设计(第2版)】是由Erlang之父Joe Armstrong撰写的一本经典著作,专注于介绍Erlang编程语言在并发、分布式和容错系统中的应用。本书适用于初学者和有一定经验的Erlang程序员。作者在书中讨论了如何利用...

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

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

    erlang 程序设计 源码

    在深入理解Erlang程序设计的源码之前,我们需要了解Erlang的一些核心概念和特性。 1. **并发性**:Erlang的并发模型基于轻量级进程(Lightweight Processes,LWP),它们类似于操作系统中的线程,但资源消耗小得多...

    JavaScript + Delphi + ErLang讲座内容(4)

    【JavaScript + Delphi + ErLang讲座内容(4)】是一个专题讲座的第四部分,主要探讨了如何将三种技术——JavaScript、Delphi和Erlang——整合应用。这个压缩包包含了多个资源,帮助学习者理解这三者的交互和实际应用...

    Erlang 程序设计 中文 + 英文 pdf

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson于1986年开发,主要用于构建高可用性...《Erlang程序设计》这本书,无论是中文版还是英文版,都为学习者提供了深入了解和掌握Erlang的宝贵资源。

    Erlang编程规则——中文翻译版本

    本文将对Erlang编程规则的中文翻译版本中的部分内容进行详细解析,包括Erlang术语、SW工程原则、程序、服务器和消息处理、Erlang特殊约定、常见错误以及所需文档约定等。 Erlang术语部分提到了Erlang程序的模块化...

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

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

    erlang 语言程序设计

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

    erlang -c语言程序接口.pdf

    Erlang与C语言接口主要通过两种方式实现:一种是将C语言编写的代码直接嵌入到Erlang程序中;另一种是通过进程间通信(IPC)的方式让Erlang与C语言程序进行交互。Erlang倾向于采用第二种方式,即进程间通信,来与C语言...

    rebar工具开发erlang工程项目和发布erlang工程项目

    在Erlang开发中,rebar是一个非常重要的构建工具,它可以帮助我们管理和编译Erlang应用程序,同时支持发布功能。本文以nitrogen_2.0.4框架为例,详细阐述使用rebar进行Erlang项目开发和发布的全过程。 ### 一、环境...

    erlang中文基础教程

    2. **并发性**:Erlang中的进程是轻量级的,创建和销毁几乎无开销,且进程间通过消息传递通信,降低了共享状态的复杂性。 3. **热更新**:Erlang支持运行时修改和更新代码,无需停止系统服务,提高了系统的可维护性...

    erlang趣学指南

    递归在Erlang程序设计中占有重要地位,因为Erlang不支持传统的循环结构。理解如何有效地使用递归来解决问题是学习Erlang的一个关键点。 错误和异常处理也是Erlang编程的一个重要部分。由于Erlang的设计哲学是容错,...

    编写分布式的Erlang程序_陷阱和对策(中文版)

    在编写分布式的Erlang程序时,开发者会遇到各种陷阱和挑战,需要掌握特定的策略来克服。 1. **分布式概念**:Erlang支持跨节点的分布式计算,这意味着程序可以在多个物理或虚拟机上运行。这需要理解如何启动和管理...

    erlang 中文基础教程

    Erlang Shell是Erlang编程语言提供的一种交互式编程环境,允许开发者直接在命令行中编写、执行Erlang代码并观察结果。无论是Linux、UNIX还是Windows操作系统,Erlang Shell都能顺利运行。只需在命令行中输入`erl`...

    最新版erlang安装包程序下载

    在“最新版erlang安装包程序下载”中,提到的“otp_win64_25.0.1.exe”是一个Windows 64位版本的Erlang OTP(开放电信平台)的安装程序。OTP是Erlang的标准库和框架集合,包含了各种模块和服务,如分布式计算、监控...

    用Erlang写了个解八数码的小程序

    标题中的“用Erlang写了个解八数码的小程序”指的是使用Erlang编程语言实现的一个解决8数码问题(也称为滑动拼图)的算法。8数码问题是一个经典的计算机科学问题,它涉及到在一个3x3的网格上,通过空格与其他数字...

    erlang中dns解析

    在Erlang编程语言中,DNS(Domain Name System)解析是一项关键功能,它允许程序将域名转换为IP地址,反之亦然。Erlang提供了强大的工具来处理网络通信,包括DNS解析。这篇博客(虽然链接不可用)可能讨论了如何在...

    Erlang中文手册.pdf

    根据提供的文件内容,以下是对Erlang/OTP R11B中文手册内容的知识点汇总。...文档中包含了一些未完成的翻译部分,提示读者在使用时要注意,并且对于任何发现的错误或者建议反馈,作者会表示欢迎并积极改正。

    erlang文献及资料汇总

    编写分布式的 Erlang 程序:陷阱和对策 硝烟中的Erlang 深入底层: erlang VM基于多核处理器的可伸缩性特征 erlang VM内部数据共享机制 erlang 消息传递机制 文章地址:...

Global site tag (gtag.js) - Google Analytics