这个是对于Ulf在qcon大会上的演讲的简单小笔记,首先Ulf一上来先介绍了一点背景知识,然后引出了小例子,就是典型的map函数,先是一个基本的串行的例子,非常简单,就是
map(F, L) -> [F(X) || X <- L].
然后举出并行的完成同样功能的小例子,就是pman
pman(F, L) ->
Pids = [spawn(fun() ->
Parent ! {self(), F(X)}
end) || X <- L],
[receive {Pid, Res} -> Res end || Pid <- Pids].
但是这里可能出现的问题就是比如函数死掉啊,receive就永远停那了,改进比如可以catch住,之类的,总之结论就是这种并行,必然涉及到很多的启动process,之间收发消息,结束process的过程,是很费力的,所以实践当中要去测量看看划不花算,Erlang的轻量级进程是作为actor针对unix的process或者pthread来说的,本质上不是把这种sequential的编码给并行化,用Erlang的并行还是应该用它的分布式的概念上面。
然后提到了SMP的一些并行中的问题,比如并行时候的bug就很麻烦,是timing related通常只有在大型项目执行的时候才能触发到这种偶然的巧合情况,而那个时候,又是没办法调试的,这种问题的本质就是没办法在单元测试的环境下控制系统的执行过程,解决的方法之一就是QuickCheck解决了这种层次的并行测试。大致介绍QuickCheck的概念,理论上说是property based testing但是没人听得懂,说的通俗点就应该是model based testing,然后开始拿自己之前的一个proc_reg作为例子,是Ulf自己以前写的注册进程的一个东西。
串行运行QuickCheck的时候,没有问题,并行的时候,几乎不用改动所写,只换了个调用库就行了,然后出错,出错的时候错误的表示跟原来串行的时候有所变化了,是前边一部分的sequential prefix相当于把系统置于某一个状态,这部分就是相当于达到产生错误的前提,串行并行不影响,如果可以shrink掉的话,也一样会被简化,就像我做其它的时候,这里有时候就是[]了,表示没什么了。总之,对这里最有关键的是后边的parallel component部分,并行运行两个命令,返回的结果也表示了,一个true另外一个exception然后,用运行时候的时间图来表示,显示一下运行的这个过程,这个图的话我还没找到怎么生成,想着应该是用pulse一下的,最后可以缩小范围之后,可以加入atomic的控制,进行修复,再改正了之后,就基本没问题了,基本是因为QuickCheck只开启两个进程,不过我想,这里QuickCheck可以再改进,就是真正到了十分确信某个版本应该工作之后,可以加大并发的数量,可以不去真的做shrinking但是,简单的加大并行,能够验证是不是真的改对了之类的。
最后的结论就是SMP很难,但是有了QuickCheck他们会更好的弄的,呵呵,感谢爱立信花钱请人弄了这么好的库然后给我们用。
分享到:
相关推荐
在“erlang programming”这个主题下,我们可以深入探讨以下几个关键知识点: 1. **Erlang语言基础**:Erlang是瑞典电信设备制造商Ericsson为解决实时通信系统需求而开发的。它采用函数式编程范式,强调纯函数和不...
### Erlang Programming 导读.pdf 知识点详解 #### 一、Erlang简介与特点 **Erlang**是一种通用的、并发性强的、容错性高的编程语言,适用于构建分布式系统的软件。它最初由爱立信公司开发,用于解决电信系统中的...
这是《 Erlang编程语言》的上一页,我们正在处理中,将那里的所有书籍都转换为新页面。 请再次检查此页面!!!
本书《Programming Erlang》旨在帮助读者理解和掌握如何使用Erlang编程语言来构建并行世界中的软件。从目录可以看出,本书首先介绍了Erlang的基础概念和安装指南,随后逐步深入到更高级的主题和技术细节。通过这种...
《Programming Erlang》是Joseph Armstrong所著的一本详细介绍Erlang编程语言的书籍。这本书旨在帮助读者理解Erlang的设计哲学、语法特性以及如何利用它来构建高效、容错的并发系统。Erlang是一种静态类型、函数式...
### 关于《Pragmatic Programming Erlang 第二版》的核心知识点概述 #### 一、书籍基本信息及背景介绍 《Pragmatic Programming Erlang 第二版》由Erlang之父Joe Armstrong撰写,是一本深入浅出地介绍了Erlang语言...
【JavaScript + Delphi + ErLang讲座内容(4)】是一个专题讲座的第四部分,主要探讨了如何将三种技术——JavaScript、Delphi和Erlang——整合应用。这个压缩包包含了多个资源,帮助学习者理解这三者的交互和实际应用...
《编程Erlang》是Joe Armstrong所著的一本经典书籍,深入浅出地介绍了Erlang这门函数式编程语言,以及它在并发和分布式系统中的应用。源码分析可以帮助我们更深入地理解Erlang的内在机制和设计哲学。 Erlang是一种...
Joe的那篇erlang论文 Programming Erlang + 源码包 Erlang Programming Concurrent Programming in Erlang efficiecy guide 资源齐全.希望能帮到你.
**并发编程在Erlang中的应用(Concurrent Programming in ERLANG)** 本标题及描述明确指出了文档的主要内容是关于如何在Erlang语言中进行并发编程。Erlang是一种通用、并发、强类型、垃圾回收的编程语言,特别适用...
《Programming Erlang》是由Joe Armstrong编著的一本关于Erlang编程语言的经典著作。这本书深入浅出地介绍了Erlang的各个方面,旨在帮助读者理解和掌握这门强大的并发和分布式计算语言。 Erlang是一种静态类型、...
### Erlang - 结构化编程使用进程 #### 摘要与背景介绍 本文档探讨了如何在Erlang环境中应用结构化编程技术,并通过一个个人会计软件的应用案例来展示进程作为设计构建的重要作用。作者Jay Nelson从多个角度讨论了...
Programming Erlang + 源码包 Erlang Programming Concurrent Programming in Erlang Joe的那篇erlang论文 efficiecy guide
### Erlang编程语言的核心知识点 #### 一、Erlang 解决的问题与应用场景 **Erlang** 是一种专门设计用于解决高度并发、分布式“软实时系统”开发问题的编程语言。它主要针对以下三个核心问题: 1. **快速高效地...