基于消息传递的并发模型:Actor和CSP的区别

本文探讨了两种并发模型——Actor模型和CSP(Communicating Sequential Processes),通过代码示例、模型图对比及特性分析,展示了它们在消息传递、状态管理和通信同步上的差异。文中还介绍了Erlang在实现并发模型上的应用,包括简易银行账户和IP数据库项目,并分享了Erlang的‘Let it crash’思想及其优势。
摘要由CSDN通过智能技术生成
An object oriented language is a language with good support for objects.
A concurrency oriented language has good support for concurrency.

--Joe Armstrong

两类通用并发模型:参考七周七并发模型

  • 共享内存型Shared Memory
    • 线程Threads
    • 锁Locks
    • 互斥l量Mutexes
  • 消息传送型(CSP和Actor模型)
    • 进程Processes
    • 消息Messages
    • 不共享数据(状态)No shared data

重点介绍消息传送型的两种模型Actor和CSP(Communicating Sequential Process)的各项对比

主要目的:除了常用的Python、Java等用的并发模型之外,还存在这么个东西

先看两段代码

代码示例对比

使用Erlang代码和Go代码分别实现打印服务print_server,用来对比模型使用差异

Actor模型-Erlang代码

%%%-------------------------------------------------------------------
%%% @author Suncle
%%% @doc
%%% print_server
%%% @end
%%% Created : 2017/12/18 14:53
%%%-------------------------------------------------------------------
-module(print_server).
-author("Flowsnow").

%% API
-export([print_server/0, start_print_server/0, send_msg/2]).


print_server() ->
  receive
    Msg ->
      io:format("print_server received msg: ~p~n", [Msg]),
      print_server()
  end.

start_print_server() ->
  Pid = spawn(?MODULE, print_server, []),
  Pid.

send_msg(Msg, Pid) ->
  Pid ! Msg,
  io:format("send_normal_msg: ~p~n", [Msg]).

Erlang shell输出结果如下:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值