http://blog.csdn.net/karl_max/category/402158.aspx 这里的笔记也不错!
Pid ! {self(),{circle, 8}}
-module(area_server1).
-export([loop/0,rpc/2]).
rpc(Pid, Request) ->
Pid ! {self(), Request},
receive
{Pid,Response} -> Response
end.
loop() ->
io:format("server pid:~p--~n",[self()]),
receive
{From, {rectangle,Width,Ht}} ->
io:format("server pid:~p--client ip ~p----",[self(),From]),
From ! {self(), Width * Ht},
loop();
{From, {circle, R}} ->
io:format("server pid:~p--client ip ~p----",[self(),From]),
From ! {self(), 3.14 * R * R},
loop();
{From, Other} ->
io:format("server pid:~p--client ip ~p----",[self(),From]),
From ! {self(), {error, Other}},
loop()
end.
-module(clock).
-export([start/2,stop/0]).
start(Time, Fun) -> %%多次调用start虽然失败,但是创建的进程却一直在跑。
register(clock, spawn(fun() -> tick(Time, Fun) end)).
stop() -> clock ! stop.
tick(Time, Fun) ->
io:format(" now is ~w"" prosess id is ~w~n",[time(),self()]),
receive
{zdx,_} -> io:format("received!!~p~n",[time()]),
tick(Time,Fun);%%再次调用这个程序的堆栈,一直循环同一个程序实例!! self()一直保持不变的!
stop -> void
after Time -> Fun(),
tick(Time, Fun)
end.
shell: clock:start(10000,fun() -> io:format("time is ~p",[time()]) end).
clock!{zdx, hel}
测试erlang进程 2G内存可以跑到100万的进程,100万个进程啊,同时pc上还有其他东西跑!
-module(processes).
-export([max/1]).
max(N) ->
Max=erlang:system_info(process_limit),
io:format("Maximum allowed processes is:~p~n",[Max]),
statistics(runtime),
statistics(wall_clock),
L =for(1,N,fun()-> spawn(fun() -> wait() end) end),
{_,Time1} = statistics(runtime),
{_,Time2} = statistics(wall_clock),
lists:foreach(fun(Pid) ->Pid ! die end ,L),
U1 = Time1 *1000/N,
U2 = Time2 *1000/N,
io:format("Process spawn time = ~p(~p) microseconds ~n " ,[U1,U2]).
wait() ->
receive
die -> void
end.
for(N,N,F) ->[F()];
for(I,N,F) -> [F()|for(I+1,N,F)].
8.8 如何编写一个并发程序
-module().
-export().
start() ->
spawn(fun loop/0).rpc() ->
loop() ->
erlang 函数的参数传递: 如果传递的参数为函数那么需要使用如下方式:
以fun开头,后面是export 参数的格式 fun/n n为此函数参数的个数
如:
-module(forasc).
-export([ascpr/0,for1/3]).
ascpr() -> for1(1,256,fun fun1/2).
for1(Max,Max,F) ->[F(Max,[Max])];
for1(I,Max,F) ->[F(I,[I])|for1(I+1,Max,F)].
fun1(K,M) -> io:format("ascII: ~-10w: ~p~n",[K,M]).
打出asc码
43> forasc:ascpr().
ascII: 1 : [1]
ascII: 2 : [2]
ascII: 3 : [3]
ascII: 4 : [4]
ascII: 5 : [5]
ascII: 6 : [6]
ascII: 7 : [7]
ascII: 8 : "\b"
ascII: 9 : "\t"
ascII: 10 : "\n"
ascII: 11 : "\v"
ascII: 12 : "\f"
ascII: 13 : "\r"
ascII: 14 : [14]
ascII: 15 : [15]
ascII: 16 : [16]
ascII: 17 : [17]
ascII: 18 : [18]
ascII: 19 : [19]
ascII: 20 : [20]
ascII: 21 : [21]
ascII: 22 : [22]
ascII: 23 : [23]
ascII: 24 : [24]
ascII: 25 : [25]
ascII: 26 : [26]
ascII: 27 : "\e"
ascII: 28 : [28]
ascII: 29 : [29]
ascII: 30 : [30]
ascII: 31 : [31]
ascII: 32 : " " "\s"
ascII: 33 : "!"
ascII: 34 : "\""
ascII: 35 : "#"
ascII: 36 : "$"
ascII: 37 : "%"
ascII: 38 : "&"
ascII: 39 : "'"
ascII: 40 : "("
ascII: 41 : ")"
ascII: 42 : "*"
ascII: 43 : "+"
ascII: 44 : ","
ascII: 45 : "-"
ascII: 46 : "."
ascII: 47 : "/"
ascII: 48 : "0"
ascII: 49 : "1"
ascII: 50 : "2"
ascII: 51 : "3"
ascII: 52 : "4"
ascII: 53 : "5"
ascII: 54 : "6"
ascII: 55 : "7"
ascII: 56 : "8"
ascII: 57 : "9"
ascII: 58 : ":"
ascII: 59 : ";"
ascII: 60 : "<"
ascII: 61 : "="
ascII: 62 : ">"
ascII: 63 : "?"
ascII: 64 : "@"
ascII: 65 : "A"
ascII: 66 : "B"
ascII: 67 : "C"
ascII: 68 : "D"
ascII: 69 : "E"
ascII: 70 : "F"
ascII: 71 : "G"
ascII: 72 : "H"
ascII: 73 : "I"
ascII: 74 : "J"
ascII: 75 : "K"
ascII: 76 : "L"
ascII: 77 : "M"
ascII: 78 : "N"
ascII: 79 : "O"
ascII: 80 : "P"
ascII: 81 : "Q"
ascII: 82 : "R"
ascII: 83 : "S"
ascII: 84 : "T"
ascII: 85 : "U"
ascII: 86 : "V"
ascII: 87 : "W"
ascII: 88 : "X"
ascII: 89 : "Y"
ascII: 90 : "Z"
ascII: 91 : "["
ascII: 92 : "\\"
ascII: 93 : "]"
ascII: 94 : "^"
ascII: 95 : "_"
ascII: 96 : "`"
ascII: 97 : "a"
ascII: 98 : "b"
ascII: 99 : "c"
ascII: 100 : "d"
ascII: 101 : "e"
ascII: 102 : "f"
ascII: 103 : "g"
ascII: 104 : "h"
ascII: 105 : "i"
ascII: 106 : "j"
ascII: 107 : "k"
ascII: 108 : "l"
ascII: 109 : "m"
ascII: 110 : "n"
ascII: 111 : "o"
ascII: 112 : "p"
ascII: 113 : "q"
ascII: 114 : "r"
ascII: 115 : "s"
ascII: 116 : "t"
ascII: 117 : "u"
ascII: 118 : "v"
ascII: 119 : "w"
ascII: 120 : "x"
ascII: 121 : "y"
ascII: 122 : "z"
ascII: 123 : "{"
ascII: 124 : "|"
ascII: 125 : "}"
ascII: 126 : "~"
ascII: 127 : [127]
ascII: 128 : [128]
ascII: 129 : [129]
ascII: 130 : [130]
ascII: 131 : [131]
ascII: 132 : [132]
ascII: 133 : [133]
ascII: 134 : [134]
ascII: 135 : [135]
ascII: 136 : [136]
ascII: 137 : [137]
ascII: 138 : [138]
ascII: 139 : [139]
ascII: 140 : [140]
ascII: 141 : [141]
ascII: 142 : [142]
ascII: 143 : [143]
ascII: 144 : [144]
ascII: 145 : [145]
ascII: 146 : [146]
ascII: 147 : [147]
ascII: 148 : [148]
ascII: 149 : [149]
ascII: 150 : [150]
ascII: 151 : [151]
ascII: 152 : [152]
ascII: 153 : [153]
ascII: 154 : [154]
ascII: 155 : [155]
ascII: 156 : [156]
ascII: 157 : [157]
ascII: 158 : [158]
ascII: 159 : [159]
ascII: 160 : "?
ascII: 161 : "?
ascII: 162 : "?
ascII: 163 : "?
ascII: 164 : "?
ascII: 165 : "?
ascII: 166 : "?
ascII: 167 : "?
ascII: 168 : "?
ascII: 169 : "?
ascII: 170 : "?
ascII: 171 : "?
ascII: 172 : "?
ascII: 173 : "?
ascII: 174 : "?
ascII: 175 : "?
ascII: 176 : "?
ascII: 177 : "?
ascII: 178 : "?
ascII: 179 : "?
ascII: 180 : "?
ascII: 181 : "?
ascII: 182 : "?
ascII: 183 : "?
ascII: 184 : "?
ascII: 185 : "?
ascII: 186 : "?
ascII: 187 : "?
ascII: 188 : "?
ascII: 189 : "?
ascII: 190 : "?
ascII: 191 : "?
ascII: 192 : "?
ascII: 193 : "?
ascII: 194 : "?
ascII: 195 : "?
ascII: 196 : "?
ascII: 197 : "?
ascII: 198 : "?
ascII: 199 : "?
ascII: 200 : "?
ascII: 201 : "?
ascII: 202 : "?
ascII: 203 : "?
ascII: 204 : "?
ascII: 205 : "?
ascII: 206 : "?
ascII: 207 : "?
ascII: 208 : "?
ascII: 209 : "?
ascII: 210 : "?
ascII: 211 : "?
ascII: 212 : "?
ascII: 213 : "?
ascII: 214 : "?
ascII: 215 : "?
ascII: 216 : "?
ascII: 217 : "?
ascII: 218 : "?
ascII: 219 : "?
ascII: 220 : "?
ascII: 221 : "?
ascII: 222 : "?
ascII: 223 : "?
ascII: 224 : "?
ascII: 225 : "?
ascII: 226 : "?
ascII: 227 : "?
ascII: 228 : "?
ascII: 229 : "?
ascII: 230 : "?
ascII: 231 : "?
ascII: 232 : "?
ascII: 233 : "?
ascII: 234 : "?
ascII: 235 : "?
ascII: 236 : "?
ascII: 237 : "?
ascII: 238 : "?
ascII: 239 : "?
ascII: 240 : "?
ascII: 241 : "?
ascII: 242 : "?
ascII: 243 : "?
ascII: 244 : "?
ascII: 245 : "?
ascII: 246 : "?
ascII: 247 : "?
ascII: 248 : "?
ascII: 249 : "?
ascII: 250 : "?
ascII: 251 : "?
ascII: 252 : "?
ascII: 253 : "?
ascII: 254 : "?
ascII: 255 : ""
ascII: 256 : [256]
[ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,
ok,ok,ok,ok,ok,ok,ok,ok,ok,ok|...]
44>