`
做一行爱一行吧
  • 浏览: 23663 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

erlang的并发(一)

 
阅读更多

对于erlang,我并没用深入的研究过,充其量是一个业余选手,工作中用到了或有不懂得我就自己做做实验或看看源码给自己一个交代!

 

erlang的并发

 

erlang的并发在于进程,进程也是erlang的灵魂(至少我这么认为),并发也就是并行,你在运行我也在运行(我们不考虑计算机自身内存的处理方式,因为我们感觉不到),而且各自拥有自己的内存,A进程想于B进程互相交流就只能靠发送消息,然后依靠返回的结果让A进程知道B进程的一个状态

 

基本格式为(大家都知道)

Pid ! Message

 

receive

      ……

end

 

接下来让我们做一点有趣的事情

我们先来写一个接收的方法,然后我们来为这个文件写一个启动进程的方法

-module(server1).
-export([
	loop/0,
	create_process/0
]).

loop() ->
	receive
		{move, Distance} ->
			io:format("How far we pasted:~p~n",[Distance])
                        loop();
		{jump, Distance} ->
			io:format("How far we jumpped:~p~n",[Distance*2])
                        loop();
		{stop, Time} ->
			io:format("How long has been pasted:~p~n",[Time]),
                        loop()	
	end.
%%方法返回的是Pid
create_process() ->
	spawn(fun server1:loop/0).

我们来发条消息测试一下

E:\test>erl
Eshell V5.9  (abort with ^G)
1> Pid = server1:create_process().
<0.32.0>
2> Pid ! {move, 100}.
How far we pasted:100
{move,100}

上面的测试有了正确的返回结果(如果仔细观察你会产生这样一个问题,到底是谁给我们创建的这个进程发了这条消息呢?程序中并没有创建另一个进程啊!!!

敲击self().命令我们控制台出现了一个进程号,原来控制台就是一个进程本身,也就是我们利用控制台进行消息发送给我们自己写的进程,如果你喜欢乱点乱看那么输入tv:start().会出现这样一个GUI界面点开Owner Name列里的一个app选项你就会看到消息是怎样一点点来回发送的了。

 

言归正传

 刚才的程序很简单,没有任何交互在其中,我们来扩展成有交互并且能处理错误信息的一种程序

 

-module(server1).
-export([
	loop/0,
	rpc/2,
	create_process/0
]).

rpc(Pid, Request) ->
	Pid ! {self(), Request},
	receive
		Response ->
			Response
	end.

loop() ->
	receive
		{From, {move, Distance}} ->
			From ! Distance,
			loop();
		{From, {jump, Distance}} ->
			From ! Distance,
			loop();
		{From, {stop, Time}} ->
			From ! Time,
			loop();
		{From, Other} ->
			From ! {error, Other},
			loop()
	end.

create_process() ->
	spawn(fun server1:loop/0).

 这个程序运行结果可想而知,在控制台进程中会显示出请求的结果,

 

你可以自己试着为上面的程序加一个方法将rpc封装于其中,

这样的话我们的程序就多出一个对外的接口方法,

正常我们工作都是按照这个简单的框架去编写这样的一个程序,即便是其他的编程语言,也不会提倡直接调用文件内的内部方法,这只是一个很简单的例子,但对于他的扩展却意义很大,我们将逻辑方法写在其他的文件内,而上面的文件我们可以简单的把他当做一个消息集散中心来处理,那么就像邮局一样,每个城市都有自己的邮局,而信件就作为消息,每个人发送信件到邮局,我们再由邮局发送到每个人手中,你可以简单的想一下这样的过程

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

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

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

    erlang并发编程 .pdf

    在《Erlang并发编程》一书中,详细介绍了Erlang语言的核心并发模型和编程范式,包括但不限于串行编程、进程创建、进程间通信、分布式编程以及错误处理等。书中指出Erlang的并发性能得益于其轻量级进程,这些进程是由...

    erlang并发编程实战源代码

    erlang并发编程实战源代码erlang并发编程实战源代码

    erlang并发编程

    Erlang并发编程是Erlang语言的核心特性之一,它为构建高效、容错的分布式系统提供了强大的工具。Erlang是一种函数式编程语言,特别适合处理并发和实时系统,因其在电信行业的广泛应用而闻名。以下是一些关于Erlang...

    erlang并发编程中文翻译(cpie-cn).zip

    《Erlang并发编程》是一本深入探讨Erlang编程语言并发特性的书籍,中文翻译版为《erlang并发编程中文翻译(cpie-cn)》。Erlang是一种面向并发的、函数式编程语言,最初由爱立信开发,用于构建高可用性、容错性和可...

    Erlang并发编程 part1

    erlang并发编程,erlang之父Joe Armstrong得原著之一。

    Erlang OTP并发编程实战(中文版)

    **Erlang OTP并发编程实战** 是一本专为开发者深入理解Erlang OTP并发机制而设计的实战指南。OTP(Open Telecom Platform)是Erlang编程语言的核心组件,提供了强大的并发处理能力和分布式系统构建框架。这本书以...

    ERLANGOTP并发编程实战清晰中文版

    erlang otp学习文档 学习还不错的

    Erlang脚本在并发编程中的应用及其代码实现

    Erlang是一种专为并发和分布式系统设计的编程语言,它以轻量级进程、消息传递和强大的模式匹配机制而闻名。Erlang脚本在并发编程中的应用广泛,从简单的多进程通信到复杂的分布式系统构建,Erlang都能提供高效的解决...

    Erlang OTP并发编程实战 附书源码

    Erlang OTP并发编程实战是深入理解Erlang并发特性和 OTP(Open Telephony Platform)设计原则的关键资源。这本书的附书源码包含了14个章节的实例代码,旨在帮助读者通过实践掌握Erlang在分布式系统、容错以及高并发...

    ErlangOTP并发编程实战

     《erlang/otp并发编程实战》主要分为三大部分:第一部分讲解erlang 编程及otp 基础;第二部分讲解如何在实际开发中逐一添加otp 高级特性,从而完善应用,作者通过贯穿本书的主项目——加速web 访问的分布式缓存...

    erlang资源

    这个“erlang资源”包含两本PDF书籍——《Erlang并发编程》和《Erlang入门手册》,它们是深入理解和学习Erlang语言的关键资料。 《Erlang并发编程》这本书可能涵盖了以下知识点: 1. **并发模型**:Erlang的并发...

    ErlangOTP并发编程实战(高清PDF版)

    书是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发系统...

    erlang编程 Introducing Erlang

    Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建高可用性、容错性和并发性的分布式系统。"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,旨在帮助初学者理解和掌握Erlang的核心...

    并发需求下的Scala及Erlang语言的比较与使用

    Actor模型是一种用于构建高度并发系统的编程范式,它通过独立的实体(Actor)之间的消息传递进行通信,每个Actor负责处理自己的消息队列,从而实现高度的并行性和隔离性。 - **Erlang**: 在Erlang中,轻量级进程被...

    erlang9.rar

    OTP库提供了许多实用的模块,如gen_server、gen_event和gen_fsm,这些都是Erlang并发编程的基础。 总而言之,Erlang9.rar是一个包含Erlang/OTP 20.0 Windows 64位安装程序的压缩包,主要用于安装Erlang环境,以...

Global site tag (gtag.js) - Google Analytics