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输出结果如下: