`
wj2me
  • 浏览: 12552 次
  • 性别: 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程序以及如何在多核CPU上自动加速程序,并深入地讨论了开发Erlang应用中至关重要的文件和网络编程、OTP、ETS和DETS等主题。...

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

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

    erlang程序设计与入门

    在Erlang中,程序被视为一系列相互独立的函数调用,而不是状态改变的过程。这使得代码更易于理解和测试,因为函数没有副作用,数据不可变。 2. **并发处理** Erlang的并发机制基于轻量级进程(Lightweight ...

    erlang程序设计(第二版)中文pdf

    erlang 程序设计(第二版) 中文 pdf

    [Erlang程序设计]源代码

    **Erlang程序设计源代码详解** Erlang是一种面向并发、函数式编程语言,尤其在分布式系统和高可用性领域表现出色。本资源包含了《Erlang程序设计》一书的所有实例代码,旨在帮助读者深入理解Erlang语言的核心特性和...

    Erlang程序设计 第2版

    Erlang程序设计 第2版 Erlang程序设计 第2版Erlang程序设计 第2版

    erlang程序设计相关例子程序

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

    Erlang并发编程,Erlang程序设计,Erlang中文手册

    Erlang并发编程,Erlang程序设计,Erlang中文手册。 学习erlang的好资料。  Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此...

    Erlang程序设计中文版

    **Erlang程序设计中文版**是一本深入探讨Erlang编程语言的书籍,旨在帮助开发者理解和掌握这种在并发处理和分布式系统中广泛使用的语言。Erlang以其强大的错误恢复能力、热代码替换以及对大规模并发的支持而闻名,是...

    Erlang程序设计及源码

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

    Erlang程序设计及源代码打包

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

    Erlang程序设计].源代码

    在"Erlang程序设计"].源代码这个压缩包中,我们可以找到学习和实践Erlang编程的相关材料。这些源代码可能是书中实例的实现,或者是针对Erlang编程技巧和概念的示例。通过阅读和分析这些源代码,你可以深入理解Erlang...

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

    Erlang程序设计中文版(完整书签),清晰版!!! Erlang开发必备

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

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

    erlang程序设计2

    erlang发明者写的书。erlang/otp一种高可靠性的平台。

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

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

Global site tag (gtag.js) - Google Analytics