随笔分类 - Erlang并发编程
Erlang是一种函数式编程语言,它的面向并发编程特性,受到某些程序员的亲睐,再者,Erlang语言简洁精练,接近人的思维,作为云计算的候选者,Erlang的效率比MapReduce高得多。
摘要:上节我讲了枚举排序的Erlang实现:Erlang实战:并行枚举排序,大家有兴趣可以看看!本节我将用Erlang多进程方式实现快速排序,快速排序采用的是分治的思想,即将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。通过对比快速排序的串行算法,我们将此串行算法改进为并行算法。
阅读全文
摘要:这是海量数据的时代!互联网每天产生的数据量远远超出了我们所能想象的范围,无论是国外的Facebook、Twitter,还是国内的微博、人人,还有各种电商们,这些互联网企业在数据上是富有的,它们掌握着海量的用户数据,同时它们也需要对这些海量数据进行分析和处理。我们以前的串行化算法似乎显得力不从心,一个是计算机本身就设计为多核的,它们存在并行化问题;另一方面,更多的计算机加入到并行的行列,并行化正成为一种潮流和趋势,因为它们能用空间换取时间和性能,或者说用更多的机器来进行分析计算。
阅读全文
摘要:相信大家都听说过杨辉三角、选择排序、集合交与并操作,本文就是用Erlang语言实现这三个有趣的程序,相信大家都知道这三个概念,那么正式我们的erlang实战之旅吧!
实战1:输出杨辉三角:接口为start(N),N为行数。 实战2:选择排序:接口为sort(L),L为输入数组。 实战3:集合交与并操作。
阅读全文
摘要:为文本建立索引是文本信息处理的一个重要的任务,给定一个由英文单词构成的文件,为文件中所有单词建立索引,记录每个单词出现的行号和每行出现的次数,并将索引存入一个文件。在Erlang实战练习(六)中我强调了当时建立文本索引的时候太粗糙,一是使用了尽量规避的进程字典的方式;二是分词使用的是正则表达式,不够灵活。本文将改进我以前建立文本索引的方式,使用ETS来存储单词及其索引列表,同时拆分词使用Erlang提供的string:token模块,更加灵活和可移植性。
阅读全文
摘要:本文主要讲为文本建立索引,通过使用进程字典的方式为文本创建索引,尽管专家提倡尽量避免使用进程字典,但是在初学阶段很容易地就使用了进程字典,当然,除了进程字典方式外,还有其它方式,后面章节我将会使用另外一种方式来保存单词、行数、出现次数,也即Erlang提供的模块:ETS(Erlang Term Storage),后面我们会发现,使用ETS更加方便。
阅读全文
摘要:看过我前几次实战练习的朋友应该知道,大多数文章我都在通过练习来学习Erlang语言,我觉得通过不同的练习,可以对一门语言的某些方面有更加深入和细致的了解,而且最重要的是它比纯将理论让人印象更深刻。本节通过两个实力,温故了前面所学的知识,同时对节点的通信与管理进行了简单的实战练习。
阅读全文
摘要:
本节主要通过2个进程创建于消息传递的例子,对Erlang系统消息传递机制进行了实战的讲解分析,通过代码分析看来,Erlang消息传递过程比较简单,无非是发送与接收的通信。真应了那句:“周瑜打黄盖——一个愿打,一个愿挨”,消息传递也是这样,只有你给我发消息的时候我才能知道你对我有意思。
阅读全文
![](http://www.erlang.org/images/logo_small.png)
摘要:"Erlang实战,从实战中获得真知":有人说Erlang是一个小语种,学的人用的人太少,但是不管怎么样,Erlang在并发编程上还是能站稳脚跟,本文继续使用Erlang实现了冒泡排序、插入排序、打印九九乘法表、将两个有序列表合并成一个有序列表4个例子,希望通过这几个例子能够对前面练习的Erlang实例有一个进一步的了解,同时真正进入Erlang的世界。
阅读全文
摘要:"Erlang实战,从实战中获得真知":本文在上文的基础上继续探讨Erlang的小程序例子,通过这些例子对Erlang应该有了一定程度的认识。
阅读全文
摘要:"Erlang实战,从实战中获得真知":本文主要从最基本的程序入手,如:生成斐波那契数列、求列表元素平均值、求前N个元素的平方和等来学习Erlang.
阅读全文
摘要:上节我主要讲了Erlang并发编程的模型和相关概念,详见:Erlang并发与并发编程(一),本节将主要讲述我对于Erlang并发编程的理解,本文主要思想来源于书籍:《Erlang程序设计》。我们知道操作系统有自己的一套原语,Erlang也有自己的原语系统。首先,我们要明白的就是Erlang中的进程与OS中的进程是不一样的,它们是不等同的,在Erlang编程的时候,可以创建、链接Erlang自己的进程,它们运行在Erlang虚拟机(VM)上,如下示意图清晰地道明了OS进程与Erlang进程的区别:Erlang三个并发原语:spawn原语:Pid = spawn(Fun) %% 创建一个新的进程,
阅读全文
摘要:Erlang是一种函数式编程语言(FP:function programming),它的特长就是面向多核编写并发程序。因此,Erlang中的并发和分布式编程也是我们学习的重点。本文讲述Erlang并发的相关概念,以及并发编程的实例(本文思想基本来自于《Elang programming》,中译为:《Erlang程序设计》)。Erlang进程的工作方式:和一般的编程语言不同,Erlang进程之间没有共享内存,每一个进程都有自己的内存,想要修改其它进程的内存,你只能向它发送一个消息,然后希望它能收到而且能理解这个消息。当然,要想确认其它进程已经收到了你得消息并修改了自己的内存,你只能向它发问(通过
阅读全文