TA的每日心情 | 开心 9 小时前 |
---|
签到天数: 324 天 [LV.8]以坛为家I
管理员
- 积分
- 10945
|
Java电子书:ErlangOTP并发编程实战 PDF 电子书 Java吧 java8.com
/ a8 R7 D0 R3 ^% Q* e
# y9 j8 t+ a/ H0 m. J, e2 w作者:[美]MartinLogan著;连城译出版社:人民邮电出版社出版时间:2012年08月 0 z3 o1 ^. B8 }% I& O6 `8 Q
3 @: N6 a! A( r* o- b* }编号:166-Java吧资源免费-X0051【Java吧 java8.com】# u. r9 N' V8 a4 j
/ @3 F/ ^! P: J1 d! r# T% F) K. R! l
4 E# w& W2 w2 V" c
目录:5 Y8 o6 @ w9 V1 ~5 z3 @6 `
0 U4 o# G" n" c8 M2 \7 m, h9 G
% x6 W- Y5 r* j& E% x6 q/ ^) P
第一部分Erlang起步:OTP基础7 m" U/ |+ n( b) J
& `1 c0 t7 p) O/ V9 c b第1章Erlang/OTP平台$ H3 `+ R, |( U
/ K- N% S1 D9 T4 A- H! D
1.1基于进程的并发编程6 ?3 [+ z6 {! W$ k
. f, H; y1 n( {/ H! ~; D1.1.1理解并发0 u2 s5 L& X' Y3 W E2 P0 }
% q9 I! K2 _1 E3 \2 p0 k
1.1.2Erlang的进程模型2 S' e* _: G- R5 A6 y
+ c' ?1 @9 D% A8 y; z9 A$ e1.1.34种进程通信范式0 v9 r$ B0 `7 N) |3 r+ L+ g
: t3 ~0 H* _( W% \6 g8 ]/ A- p! A
1.1.4用Erlang进程编程
! i, p s# e9 w' i2 o! |- M! Q7 Z, D; J
1.2Erlang的容错架构1 e( w1 I4 r4 l2 o6 m/ q
& K& O/ J0 j, u( o0 U% O
1.2.1进程链接如何工作 A, P( j/ I) i3 V" ~- U; W |$ T
# T# ?8 Q, |; N: E2 ?1.2.2监督与退出信号捕捉
$ b! t) j" f9 h6 ?2 T4 X! c) c' G% P5 w9 f' i7 v( c- b1 T
1.2.3进程的分层容错3 j, }& N0 X* K% I9 \/ W+ W- L
9 ^4 w4 c/ A% \; Y6 T. K+ z1.3分布式Erlang
% [+ }8 } i' E+ V6 w8 \
( o& i/ L0 F5 H, d8 n0 Y1.4Erlang运行时系统和虚拟机1 F2 B0 V# d+ ~/ ]
, p8 e, Y4 K1 I4 { K! @2 y
1.4.1调度器- |2 k2 C, _2 ^' E- z z
- B/ o1 w; Q2 T# s" P2 f
1.4.2I/O与调度
2 a: S$ g5 ~, C
8 R8 s# ~: }( _4 Z1.4.3进程隔离与垃圾回收器
& }4 }5 {+ F! \! Y* N$ r' l2 }. ?* `" J( j
1.5函数式编程:Erlang的处世之道
2 i |' b1 o- f7 g5 E* s( f' d
/ I4 D; _- X9 B- S6 c; X: }1.6小结
" I/ x' [6 J7 |" a
; x: V! d& G+ v! S9 a6 J) O W* h! P: E
8 ?- x4 t* Z: k& |) C) G5 V% Y第2章Erlang语言精要
3 U# W5 U/ o/ |/ s: {- @3 }4 H# h j, J9 L+ J
2.1Erlangshell
9 S5 e4 G2 j+ E$ z2 S+ n! I% E
/ Y3 S- S" s+ W- L3 t m6 U2 q2.1.1启动shell$ n1 w' a5 `7 f3 b
" [& D9 V! a. K; f4 y2 J2.1.2输入表达式
B- {; v/ V. _, e
: t* {/ R2 M/ ^, m! H# l+ j2.1.3shell函数
9 z' ?9 ?% [' M3 {" j( g% v) Y( [" t. ?, d/ f- C5 `* q6 | V7 E
2.1.4退出shell( ]/ q/ ^0 Q1 n* j& r+ E
8 Y2 ^* I: I+ }- ?3 e, q% u8 c2.1.5任务控制基础
: \" X9 M6 U, `! n. m; F* T" [0 c3 G. Y: g+ S; ]% J8 D
2.2Erlang的数据类型
& Y5 G+ \, K: l/ o3 ?8 f2 Z6 h9 Z( H; J S4 \1 G1 b
2.2.1数值与算术运算% O- j' X7 Q! G2 Q8 r9 h1 }
. U9 E& E! c$ Y8 J+ {7 A) p2.2.2二进制串与位串
7 g$ m- \7 V) t) K; I6 B! a7 s8 E* t) @$ p; R5 V
2.2.3原子
$ t, s4 i" z7 H9 ]" @
5 @5 d9 C# h- D0 c% S/ ]; m2.2.4元组
/ Q) H( E R( r" O0 P, L8 U g: r4 I+ ]4 t; G
2.2.5列表, @( A5 ~( C7 j& Z& _
( m+ @# g2 C" v& L9 ~2.2.6字符串
7 z, w' q8 g7 K1 G7 l% Z: G5 F4 J9 P* i8 b* H
2.2.7pid、端口和引用3 H9 p0 g/ ^+ x1 S
, o1 g- M' v! j
2.2.8将函数视作数据:fun函数
5 _/ h/ v0 s! w2 U0 t' P, n! ~& Z8 x$ T
2.2.9项式的比较
. S; |8 c0 o2 s; V% V3 C; ^) R3 G" |8 ^( H$ t7 h$ G: t
2.2.10解读列表: {$ a+ Q9 @" m4 K e
+ r Q; S- w/ l% u2.3模块和函数8 F# d6 R/ r& Y M* \
4 U) z9 T5 }1 U: O* M: q4 k
2.3.1调用其他模块中的函数(远程调用)# L0 I& g+ X$ M* l! y5 l7 y8 p1 \9 T
* L/ R! y8 P# U5 \2.3.2不同元数的函数8 j" r$ @1 c9 }0 ^8 i* j# }, _
8 I# k _- x) B* s, i/ n2.3.3内置函数和标准库模块0 o+ j% f9 h1 d F- F4 _
3 ~) E! Q5 k X9 j$ l3 N
2.3.4创建模块
: I/ \! x8 E) m- ~
; ]1 s, h' x1 u- U, z+ `3 ]2.3.5模块的编译和加载9 u( L' X% G- R2 c( U: ]
3 d% a, ^$ B7 `; ^: t2.3.6独立编译器erlc8 W" c' S) t1 x5 Z6 r, w+ J4 }. v
4 Q1 U. b& o+ F# S5 A
2.3.7已编译模块与在shell中求值
6 @ t8 j: v+ ?0 `* a
/ [# R# E7 i5 z: W3 o. ]2.4变量与模式匹配
2 a7 ?; b0 O) |9 k# |/ r6 L2 X, n# O, B8 Z# a/ C, l
2.4.1变量的语法
" m: k6 Y- C$ q" n: l
+ a5 ~8 D, k6 R/ z8 Q1 b9 Z2.4.2单次赋值9 Z; O; L8 ?. Z A
; W) O& L; y$ p
2.4.3模式匹配:加强版的赋值 p0 b" f5 `) H+ y
/ B2 J- @% q9 v- O. O& p! Y6 r" M
2.4.4解读模式
% I% F( q: E1 K7 Q7 E# s- ] s
5 b5 V7 I7 h$ X* h6 B+ y& d L2.5函数与子句
* {/ ^; o" P- j) M
2 ^( ]/ {0 x' \/ L, Z" }7 }. W2.5.1带副作用的函数:文本打印
* N/ t7 G% W9 j3 a4 b: s8 R% u$ H7 P V, A( X1 m
2.5.2用模式匹配在多个子句中进行选择0 T5 T' \: y3 o, Q/ ]5 N* P2 M
+ i# L: [" b( {+ o V# P+ s
2.5.3保护式
3 L: ^) t+ W& H
! K5 u7 |7 U/ c0 \+ A! Y1 a2.5.4模式、子句和变量作用域3 \1 u1 w0 I2 o9 o! ?' G2 I( o
5 S3 D, @. ~+ G$ O0 {
2.6Case和if表达式
; M: p6 D# N: V! g# H; F* e# D: l2 B. J" G% ^/ f2 C
2.6.1Erlang的布尔型if-then-else分支选择* q# n5 W8 C7 |6 k3 s: u$ B7 r
3 g3 J* W9 J d$ I( G8 y& j2.6.2If表达式
5 b1 f% C- l1 U( q l2 ]( N' F
2.7fun函数
w1 _5 W+ C$ R5 R' h0 O ~
/ t8 K& D9 d: R, m2.7.1作为现有函数别名的fun函数0 N# g7 ?# p7 Y: x' O9 |) l2 X
T' y4 N8 h4 Y, P7 O# N7 n2 v
2.7.2匿名fun函数
6 U4 t5 n0 v* s5 u& c3 d8 t0 ^+ p% l4 ]0 e# @ Z- r
2.8异常与try/catch: i0 q, @ K: Y2 W4 S
( E% q+ S8 E, y2 f6 n3 I2.8.1抛出(触发)异常7 Z$ ^3 L6 q3 x8 L5 [/ P' v
. x9 h6 l& r, H2.8.2运用try...catch L1 L% p9 W+ z: Q7 S
% m+ u, [7 I$ W3 n/ X. @
2.8.3try...of...catch
- }: ]& s$ d0 J6 L& e
$ J8 {. V0 q1 X1 N& c$ m2.8.4after
% e0 z% X6 f ]8 d3 c5 q* y" s8 S* ^: ]4 V- f, E
2.8.5获取栈轨迹
' e. N: q: c Z- k) P* l7 g+ ]8 ?" |5 B- n: j
2.8.6重抛异常. s& w9 O( z, K+ `
p: A6 U0 |) z, ?& B3 ^% ^$ R7 z
2.8.7传统的catch/ p9 {( U6 J- @; E! j# B% {. o( K0 T
) R9 E/ ~* U0 q, ?- g8 z; i
2.9列表速构- C9 P5 ]' y* k5 B* X
( y( R. n$ X0 V
2.9.1列表速构记法1 p; d! t' n( U- B
3 d& U/ b4 a, c2.9.2映射、过滤和模式匹配4 O# E) N& ]' i# M% p. U% K" G* Z
+ k! D E7 o( u* _! O
2.10比特位语法与位串速构% y4 B* G2 D# j E/ h
$ c" E# d% O: t; G; y6 ^) Y+ I2.10.1构造位串
2 c% A0 z' R% d
) K: N9 ]. U# H2.10.2比特位语法中的模式匹配6 {( d! d, M( V/ e m2 j3 ~
' D& y) z, o1 L* h0 K5 l
2.10.3位串速构% u8 x$ {/ P* X0 e; I" U2 a" R+ D
J4 {) C6 z f5 k" s# Z! l
2.11记录语法( W. L: N& K; U2 n2 y; [' a, V
8 }! h) o) ]1 Q! a; A+ l2.11.1记录声明: R2 ~" _7 ^6 g8 L1 k9 w6 W+ k; g+ d
1 r; B7 B1 @0 F
2.11.2创建记录- E; z- h3 m! P( K# k
" [+ [7 S3 o% w6 W; c c; |1 h; F- c. w2.11.3记录的字段以及模式匹配 Z- T1 n+ j# u. U" ^$ {2 S3 `4 F
& ^( N; i3 B" g8 B1 m2 U4 y2.11.4更新记录字段 s4 {( c4 r( i$ u* A2 A
# A" B: q/ G. U
2.11.5记录声明应该放在哪儿/ @* @$ K u2 X' ?4 u* D
* M( N2 c1 U9 n3 W2 j
2.12预处理与文件包含
! t( \$ O8 B* M/ ?: T8 J2 S
. H( ?% `1 o* F L$ M2.12.1宏的定义和使用
& ]7 N$ C! z7 i" O9 o0 O5 `5 Q! W
2.12.2文件包含' w3 L+ W' _2 V
" E6 |% X2 Z: z: R/ B6 n3 V, K# M* P2.12.3条件编译; c5 p+ p: ?- c2 r' E" U: }2 Q# i
, m9 ?" @3 H- h: s% h1 O9 b2.13进程$ d$ e4 R# w9 `* |
' ]. j& @& e9 s# \; r2.13.1操纵进程
/ x2 q1 m: R2 t" _# G
1 [1 M9 \7 r Q' K% E8 r2.13.2消息接收与选择性接收
' \' q) ^2 p3 G; A! C
* |6 T* Y' Q$ z# Q8 I. _% N5 k8 L6 \2.13.3注册进程
, [. q7 ] m2 f" V' w1 n% }% i( L% q
2.13.4消息投递与信号
7 l0 L" {2 i( i6 Z1 w: G4 n- N
7 R j% {2 Z* i; Z. j6 G2.13.5进程字典+ _& g& c) F" ^+ H& l1 @
: D5 ]& G: o `' ]9 g3 [2 H
2.14ETS表
9 p) a# A8 y8 F# n( t0 r7 c+ Y6 }* x+ O. [8 Q2 {
2.14.1为何ETS表被设计成这样3 c) X4 {1 S6 {( O5 U
: a8 H; \& [" v( `+ Y3 h2.14.2ETS表的基本用法
7 a0 q' D$ _% J3 u- N
7 T3 l. i, p6 R9 ~! L" F- t2.15以递归代替循环
" ^6 b) n' u) C }- S3 Q0 f* Q. F% j& C1 N. F4 d
2.15.1从迭代到递归
# ?- D0 J* M- ~ q9 r: `
+ _. i$ A" P; t" s2.15.2理解尾递归
/ s, O* J3 i* w! s' p+ h7 S, D9 p6 _2 M E( P5 R* H) g
2.15.3累加器参数; }$ D+ s' L& m, f! z7 z7 ~' J% ?
( s+ R% o# p9 z/ _' k2.15.4谈谈效率
. z. A! l7 w* W, o, {0 f9 b' @. y8 q" Z5 p3 w
2.15.5编写递归函数的窍门1 q) ^+ i' p7 R" ^: r
1 x+ |/ u7 y6 R3 l d' r
2.16Erlang编程资源
2 y( W. l& ~* Q8 L1 o% q8 T8 N( b- b p- D6 f
2.16.1图书
+ s0 D4 S# Z8 n2 d/ K; ^4 y# p% ?- [1 y! b
2.16.2在线资料
( H6 x, F9 A K/ D& ~4 Y
3 u5 r5 X9 O/ H2.17小结: q4 R! O* F5 C" {4 C
$ {' ?3 V! G" Y& C
, A' e( }! {. C2 P
: L9 Q& z# t. V/ z" J( J/ s! }第3章开发基于TCP的RPC服务( Y. z) c3 p' F* S
3 G# F% g" h c$ l! Z3.1你所创建的是什么( b/ m$ U8 K9 b; e# S
% R& R5 z8 L, h! t" O& f2 S
3.1.1基础知识提醒# z% e' |8 A7 H% Q6 P
. R5 J) b" ^+ c) h' A5 `
3.1.2行为模式基础
: W( ?$ s/ X/ t, n
4 K5 d' R8 \3 @- P/ |6 A3 H$ _/ s, k3.2实现RPC服务器
1 D" c% n* T, ~4 _7 `9 X+ ]
$ g+ c" `9 |* i3.2.1行为模式实现模块的典型布局
& u! j# p# A# h% v0 a: R2 Y4 I' M( ~6 B/ B1 C% F8 Y8 q
3.2.2模块7 v. \3 n. e7 c* {
+ ?- Y! Y8 H' B2 C, Q7 C7 m
3.2.3API段1 w' K1 z7 U: D
4 P4 U" e* S# E* S% W! k3.2.4回调函数段6 i' [, L1 @3 @& d! D1 H
* V/ P% [" j1 ~) J! ^: R% a
3.3运行RPC服务器2 \* a4 S- x; d* R) ?0 F- u6 f
5 j! q: X! u5 M8 V* R3.4浅谈测试
& h* y( x0 Q$ j8 o; I& d6 p3 i( I" B' o7 Y0 V/ K2 n* W
3.5小结
% u) D/ N* Y% w# j5 b2 s' e: q
6 Z1 ^2 o- a$ K9 |- l! ~2 y( t- k1 Z4 o) R2 ^( w
3 L" W, K- O e9 A# T
第4章OTP应用与监督机制
1 a: I0 Y. _) o/ z' _2 U' w8 V; G, J: v/ ]' N" c' ]
4.1OTP应用8 H) J$ [2 G# u6 ]) w
# c4 j, a2 {* E' H
4.1.1OTP应用的组织形式
& V- H* Y/ j* ^8 V3 C5 x7 r3 b8 A& U7 c2 w' R
4.1.2为应用添加元数据8 z( |5 k, l6 k7 Y# P2 F* f9 }( _
. O' }8 R7 K+ v4 G3 v- N4.1.3应用行为模式, `9 G1 }# J e* T' h- e0 k, |
, L$ K6 ]7 R4 b$ o8 A$ h
4.1.4应用结构小结
+ w8 H3 \6 I( X6 W2 o% a" J$ u: i9 Q- C: J, [2 w
4.2用监督者实现容错
/ ` U, L! F6 O [. x
% y' s: g6 D. Z, m( ^4 O0 O- N4.2.1实现监督者& g' N. m) K7 ~% |8 x2 w8 q
# R( e1 c2 K+ j7 u% E0 }4.2.2监督者重启策略7 y& c+ [& O# j5 x
: r# l4 H; e( \& E4.2.3编写子进程规范: r5 Z' y% N& r, n& v7 ^
2 f$ D; I. q! A. o% l9 Z& b4 v4.3启动应用' l% M* b( S2 i0 h6 l& Q
3 C7 X( e( q5 m4.4生成EDoc文档
/ G- p, f/ }' x- F5 X t; J; j" I$ w9 n8 c% Y) G, Z1 f0 ]- e
4.5小结
) z1 h) O/ Z j( b( \8 G, {9 Z7 K4 k# W
& d/ k: Y: u( F$ q1 u+ v
( T9 x0 a: P1 ?' W/ ]4 m8 X$ ~
第5章主要图形化监测工具的使用
, x) K0 W6 O0 ^* v1 I
; V( q1 t' X4 Q# T5.1Appmon; W2 M1 y6 n5 M L% l4 X* b
' K" h. x) w, m/ `& }
5.1.1AppmonGUI! B1 p/ W8 k- v, G1 g
$ v( }7 Y+ e& s/ e
5.1.2WebTool版Appmon( D& V5 x3 y' G, c. X$ @" g# M8 n
( N4 ^7 y: u8 f+ M5.2Pman
( x# R0 }# j' v& a
' `7 x/ [* f0 a3 }" _$ c# ~( @5.3调试器: N4 m7 Q f. y! R+ F' y
3 l$ q5 `' D g1 E$ q$ }; w' |
5.4表查看器TV
9 O0 w; @$ E; M9 Z1 ]+ L/ { i: z% w* r1 n9 N6 V2 }9 k& r1 j( N
5.5工具栏6 D3 i4 L. H3 F
G P7 F S/ w/ R& }( N5.6小结
4 f8 P" D* y* ]+ }5 n) M- F+ i8 ~$ k1 i+ {/ |
% _7 d0 _4 u x/ u, i0 W3 W" K! ]* S1 `% F. X: f/ v- s+ j
第二部分构建生产系统* X6 E9 k" a4 @9 E) D: i1 z
; h0 R) W- P3 e8 G
第6章打造一套缓存系统/ [1 s/ ~/ H" Y/ F
/ u; r. J/ E. W3 y0 v6.1故事背景/ }0 s2 s. a/ y: a
$ B% F* G; v7 q$ E1 P6.2缓存的设计
' L% C/ {" ?8 b% o5 R) Q$ q) E
6 V& {/ I3 x* c* v3 S) b& n6.3创建OTP应用的基本骨架
$ j1 W* Q# [6 }( k v, R( i1 A7 B9 ?( U
6.3.1应用目录结构的布局8 [+ O, N9 m5 ]
8 x8 b* ]4 \ n. O6.3.2创建应用元数据# z0 W; ?2 z7 b8 a1 M
( i2 i; m6 _- ~6.3.3实现应用行为模式" V9 s% @+ S) {% C
. D% r6 |9 I" U- L7 P: D" ]7 T6.3.4实现监督者0 M$ L0 F7 F. d& B% t
- s4 t4 _) ~5 j5 i6.4从应用骨架到五脏俱全的缓存* L8 \& t* a0 B# ?' q. r
7 Q7 E6 P9 O2 O( i6.4.1编写sc_element进程$ N5 w0 v1 l- b/ h
8 \ H5 q6 r+ D/ I l( e* R2 P0 m2 {: n6.4.2实现sc_store模块
) {7 m2 D: t L3 ^* s, f/ V+ R, Q1 b& n
6.4.3打造应用层API模块
+ E/ P1 Y) Z* W
$ B1 ^+ a* S' w2 F8 `% C! D/ p6.5小结/ Y. _" d+ w% G
/ c0 O# Q9 I& b% ]: U" y, X
2 D/ m |; s* {5 h1 L% w+ \& ]- q
; v% X+ e2 p) L1 a$ p/ U
第7章Erlang/OTP中的日志与事件处理
* C" U" }" g' Y+ D- w; Q; e$ y
; x+ H1 E& L' _; o% N4 Y: u7.1Erlang/OTP中的日志, [8 x, A% B( n. |5 k- `
- F" K! \0 P7 P0 i7.1.1日志概述
1 l) ^* N1 o9 @3 R2 ^4 L3 a
$ @2 e P. E/ w8 m; y# [7.1.2Erlang/OTP内置的日志设施$ j8 V6 m! s0 |- B
( y1 g& y, i. [7.1.3标准日志函数0 o" a I# a+ M
3 V! E* d- }7 e+ `
7.1.4SASL与崩溃报告
3 B* x. z" ?8 \% ~9 Y6 r$ z, Y/ e: N# f8 A: s+ @! C
7.2用gen_event编写自定义事件处理器# h7 Q- j) w* e( f7 [9 x- b
+ Y0 [! h8 q Q% t' W1 J$ E' ]7.2.1gen_event行为模式简介
1 M5 ]- r3 k U- N' N
9 @! O/ L( e! ?1 N) e7.2.2事件处理器示例
. U9 d& ^; _6 W6 }6 G' [4 c& c6 M4 o" X) d$ _* I
7.2.3处理错误事件
E9 O, r+ V& ^0 V7 @9 _! d) e
7.3为SimpleCache添加自定义事件流7 h8 x6 \2 f3 ]. A9 E& J' _, B
; Z6 Q! M0 H0 j7 m6 f( c* x7.3.1事件流API z! S. g. H! G5 Z/ e- _
* B% f. ]4 d4 C7.3.2将处理器整合进SimpleCache
W6 [( L4 d3 K' g! ^2 ^. Y+ u. d
- p6 C$ h8 e0 F- f+ k, Q# c7.3.3订阅自定义事件流; e+ L G+ W' {$ z' ^6 `3 N
6 n' j5 V; g6 l5 G8 ?. t- J7.4小结) X0 M- j. v9 g& q& C
3 ]% e$ p) {% v) t) m* W) g3 ]3 N* m) n8 H6 V& }- x
" w6 @0 N- t% w% F7 c/ `
第8章分布式Erlang/OTP简介7 C! y2 J& C( B z; Q
* K+ H" d' B6 a. w: H- |
8.1Erlang分布式基础
, u: R* w$ D3 e4 j Y4 E# U+ ]) f/ ?) q6 P8 e7 Y- p+ H9 k m) F6 J
8.1.1复制式进程间通信
% G8 V8 \' A- }0 t1 Y% d% Q5 p' z8 D8 g' X$ P5 Q3 |/ [
8.1.2位置透明性' g X& Z. r" y3 P. k) P
( z6 G7 A$ I8 u5 u; ]8.2节点与集群9 l8 J( p+ K2 x1 ^. ]/ {& F" ~
/ Q6 l# \/ N) e! _) R3 h
8.2.1节点的启动
- }" [( m/ f1 k0 P1 _2 U7 |( K
! T" F* D# l$ v' @/ w1 ?8.2.2节点的互联1 ]) S2 n9 q! B
6 e2 A+ f7 N% v0 E* b, v
8.2.3Erlang节点如何定位其他节点并与之建立通信
% f( m2 | w$ J
" r0 e* d0 o/ K8.2.4magiccookie安全系统9 k# k8 i3 H. {1 Q" y$ D9 D
+ ]3 ]& n, [; k* ~6 V8.2.5互联节点间的消息传递
& R: }) }+ |' b; C/ o# t
0 v7 A, E5 K! e8.2.6使用远程shell
+ U4 Y6 ^- R' Q8 j9 R- Z6 C+ e. ~9 Q; x @: z- @! Q- P
8.3资源探测攻略
% g, @8 \( n5 \0 M/ h3 C7 [" Y* ^3 X+ K+ S$ j" H
8.3.1术语
8 P8 \( h5 f+ U5 o, b4 Y9 }5 M/ Q3 E% }6 s1 K
8.3.2算法
: Y3 {9 J' k v% `+ }3 P! b4 w$ X3 n1 D9 {
8.3.3实现资源探测应用
" f9 |2 h& w6 J4 z
0 _( ~/ h6 L6 M2 i# f/ J8.4小结9 Y' D- d( v1 m: B
8 b! [2 J' K6 I# B2 ]3 w, {- W/ h* l# y$ `3 k: ~ A
# g H' ]- j3 h
第9章用Mnesia为cache增加分布式支持
# H. K3 t/ W$ b. d A& B( Y9 q: E9 ^6 {; s6 I
9.1分布式缓存5 w _. X% Q5 T
L, Y) x) N8 i- x
9.1.1选取通信策略
( s- p% y1 e! [
- b q1 G+ J7 l0 P8 m6 q3 M7 e9.1.2同步缓存和异步缓存/ h8 g& o$ Y) o) h# P
: j2 |4 d% ~8 e1 p! e9.1.3分布式表
1 v& W5 a/ `5 Z; T5 Q! {( ^% Z8 `3 k# C
0 @6 [" H( E( T9.2用Mnesia实现分布式数据存储9 Z3 u; B- }6 S& r0 h1 {
5 l( J2 M( a; o$ K( e9.2.1建立项目数据库
. ~3 V; x. N! b, S7 [" Y
7 ], j- |7 j2 i2 B9.2.2初始化数据库
0 n) y- p7 \( i; S0 y0 q9 |- |, l# k; g, Y
9.2.3建表9 |% B' b0 r$ _5 C: D$ d" h, L
0 v+ U" J( A3 D# g3 k) O" _
9.2.4向表中录入数据
: U* A9 c( w6 t) G7 i8 H# B# p9 A4 o7 \! T! ?& t
9.2.5执行基本查询" V1 R4 Z3 X3 b- [9 g/ f4 Z+ [5 J
9 K. F) M0 r- C9 n4 D8 f" B" ]2 J4 U9.3基于Mnesia的分布式缓存# Q- }( u2 D" C; a
! j1 `# t" C9 u" W* W n" M9.3.1用Mnesia取代ETS. m. t7 B# J" Q, n" M1 R
) ^, j# ~8 N3 @; [$ x7 z5 ?
9.3.2让缓存识别出其他节点8 `3 r. ]3 n) L, g+ x% Z8 g7 y
5 d; L7 t+ ^% e! `8 G0 R+ g0 y) B
9.3.3用资源探测定位其他缓存实例2 l$ \% q' Q7 C: Q3 L& E
4 d3 k' p& J1 i9.3.4动态复制Mnesia表
W% m `+ Z2 T8 N; n I, _; H% I f2 [, J( u' @
9.4小结) g0 |5 F: Z6 b0 |% Z4 v2 q
0 \/ C) C4 ]6 W4 r
9 o- U) w( E5 P! L3 I u4 B7 _% E& s4 f" x ?4 P
第10章打包、服务和部署
" O% O; i7 K# y5 h7 j" `# i7 Z, t; i, W: L
10.1从系统的角度看应用# }$ C" K% K% x& e" I
7 u3 G/ `5 C. }: U& i* S
10.1.1结构
$ Z. ^. j% x+ Q4 {7 ]- S% B/ {9 }% O1 E5 {1 i7 Z8 m: g
10.1.2元数据; ^% J' D/ K9 O8 x/ [9 d
. _! U" Z3 |" U- b$ d( ^1 q
10.1.3系统如何管理运行中的应用* Q ?: |1 E7 D5 e/ E/ T: n
" d/ q9 C9 Y" w0 {) G% r4 e
10.2制作发布镜像
4 O6 i9 x5 I% N5 v
- O' B, g" U* g10.2.1发布镜像
( y7 n I& f' H8 p/ ^% b
. R: L$ a1 W+ e, ^4 D" {10.2.2准备发布代码
$ M, i! i7 M+ H9 n: Z% W( M
+ c5 N: L, C0 ^( B9 S6 g10.2.3发布镜像的元数据文件
# F @6 z; D; x# x3 L& _$ x$ B( B/ A& v$ ~( S8 F( c7 e
10.2.4脚本与启动文件8 e+ _, u2 {, p( t" n
: [9 Z8 H. { s7 Y7 N, s9 g
10.2.5系统配置
% c/ s7 K3 u7 O2 L: x% M
* P: ]$ n* r4 G10.2.6启动目标系统
+ }* X; C# ?# \9 g) b, `9 `4 i- |% y# H) z
10.3发布镜像打包
9 t' N* p& W: j4 H
" E- k4 `) }! H. L10.3.1创建发布镜像包' ^2 @. W k$ }9 H S1 Y, X n% j
2 t+ \/ x1 n! X# s2 Q9 y. j
10.3.2发布镜像包的内容
- ]( `7 f1 W; C1 G2 N0 m5 t
# R1 [: c7 \- ?! W9 y3 ?10.3.3定制发布镜像包+ ?$ V/ x" s4 h& t1 V# @* y
* `1 o9 T8 E, t$ y3 m; ]; t
10.4安装发布镜像
$ x' \- G, r1 c9 y N( A6 C5 F
% i* u/ z. }: y, `0 d( \10.5小结3 F5 v4 Y7 Z% l Q0 s8 T o$ P
& y! \5 O ~3 d! }7 F* a3 _, h, K6 q4 m l
- v8 F( O, H& ]8 O6 b
第三部分集成与完善
6 ?) A; @: F* x
. I, X4 z; e( k/ o第11章为缓存添加HTTP接口
: d+ [- w6 m' N2 D2 J m! s! z; x' M$ _! M
11.1实现TCP服务器
9 s9 M1 x7 W5 B- `+ m8 J5 {4 }! G. {4 U: T# \
11.1.1高效TCP服务器的设计模式" g+ G8 [+ [5 U& y' s/ C2 s- l$ K) `
8 t5 _* a' y' p; l |( ?, C) `6 [) Z
11.1.2搭建tcp_interface应用的骨架
, X T: ?# M% d6 b' A
# b9 y; x6 a: X9 u. Y11.1.3填充TCP服务器的实现逻辑& p6 M& A8 o! N4 M
$ U- o0 h( F+ O \4 ~4 J
11.1.4简单文本协议
0 X3 \/ c) ^ F$ [- g+ I, A" V3 T* g+ y8 v8 y4 V; w; m
11.1.5文本接口实现; r1 c I* w8 e1 T# g9 X
5 c/ n" w- X! a1 E6 }. P) f
11.2打造一套全新的Web接口. {/ N/ f- b& V/ k. n. S* u; @8 E
: T5 ^ Q- u) j; L- J; I11.2.1HTTP简介. v4 n* `# a1 J- S2 F9 T
0 s$ d% t! I7 O11.2.2实现一套通用的Web服务器行为模式
5 A8 B8 b. f4 g5 Z8 X0 s6 N4 o$ T& L* g( [- A$ E
11.2.3初识REST! o1 G4 a/ N/ |: o( T( N4 a- v; X
( l- s- T& z2 x$ Y4 g4 [11.2.4用gen_web_server实现REST式协议
5 Z9 s! D$ R+ L9 `' `' ?, q2 U. _: g' @5 V4 V
11.3小结& U1 F- ]7 G/ r5 B$ J
3 D- X8 d, b' ^ w2 E" i
4 r# j" A9 g4 V, k, ^$ ?( o$ `
5 G$ K( o# n" s; I! R第12章用端口和NIF集成外围代码
% l8 Z# s1 Z9 L1 B' Z: A o1 u+ m7 u4 u: z- a
12.1端口和NIF# A; f- q& A+ ~7 ]/ e* L& t
/ b7 _2 p, i u9 _" m& o7 W5 A5 S12.1.1普通端口5 R v i4 o; l* ]8 E: J" g! J( i
4 C$ L8 c$ ^. d6 O/ b( i12.1.2链入式端口驱动
! y8 p: X4 ~+ R' U$ E- Q' W
& K+ e2 t e3 m* i$ p12.1.3原生函数(NIF)
7 \3 Z. O: `# i8 @4 q( R1 ]8 Z
7 H1 k+ o& H3 b0 n/ o2 g12.2用端口来集成解析器, b5 ~# d6 w4 ~4 D
% K& D" ]7 A, I3 d4 a7 M) _4 P
12.2.1Erlang方面的端口
3 f* [5 T# \/ N$ m8 ^
, l. K& Z3 v9 t* s12.2.2C方面的端口8 U8 p5 A/ I4 A4 f
! g/ W9 b' {7 O4 P* n+ p
12.2.3编译运行* H$ z8 C& l; J, X3 U, V4 r3 x: |
. Y! Q) _1 L+ c4 P( P6 X- h12.3开发链入式驱动
- ^2 E% E" n) K
" F L% ?0 P/ ]+ P, H) I+ e12.3.1初识链入式驱动" d0 z) y2 a2 H' C/ ?- n( ~
. e8 W9 y7 ]7 g, X
12.3.2驱动的C语言部分# ^7 }4 @. T2 ]- d
. f# A% T6 j% ^
12.3.3编译驱动代码. R+ c2 k: ]$ p, T# T6 z* u2 _& Q
/ y6 c, i# _! Z, w% R: u12.3.4驱动的Erlang部分7 ^8 O1 J: D+ S
. y0 u7 h: {; E
12.4将解析器实现为NIF* Q [% C! ?) q! p* _
& H& X" ?* S2 L4 N8 q6 n3 c12.4.1NIF的Erlang部分" j4 n8 U: x5 k2 q6 r" V) Y9 l; w' P
0 l/ W* k& J8 ^12.4.2NIF的C代码部分+ B" ?! ?6 _' ?. @
: I& b E# }9 ~4 b& w" @& G& x8 [3 K12.4.3编译与运行代码) p1 Y& k$ z6 @" ~
3 f+ u5 K' {4 j9 ~+ u12.5小结
: f) E! _& {+ T @# K( b0 t& R: U, A0 N& z/ R$ z( _4 b3 W9 m
1 Q+ ~4 y8 e% y Z# x6 G5 [) m4 Z
- V- g* ~+ V! {' S: M
第13章用Jinterface实现Erlang和Java间的通信
1 x& n' ^2 j+ Q- P% {2 Y; ?2 Q" Y% F3 b
13.1利用Jinterface在Erlang中集成Java( T) {2 n i/ F9 e- t
2 o: |# C3 w2 Z9 s" W13.1.1OtpNode类8 q; B( L o0 @0 L" I/ ~/ S9 W2 Z |
8 o4 Y* _. z; O! l13.1.2OtpMbox类( q# J' W1 R3 k4 R! H! P
1 N* k1 u! M' p. K* b
13.1.3Erlang数据结构的Java映射
& S. p; W) e$ v& `7 D- b
I7 y8 X+ u; x6 _" e2 P- O! l( @/ G13.1.4示例:Java中的消息处理
$ {; N2 i2 F% N# |
: H" g, i6 I1 m3 v13.1.5在Erlang中与Java节点通信
" P: @3 m; F9 a3 S! T* i- {
/ \/ R% Y2 J: K6 j$ d+ z1 ^" E13.2安装和配置HBase
' {+ }& o4 D2 ^$ p) {+ C% I! W- Z @& L- ^5 a& j
13.2.1下载和安装
. r6 I" C# D/ c; a- v' W5 x* n
4 k0 |6 ]) h9 }) h, T13.2.2配置HBase
2 Z$ z7 ?! r! M: l; C# [8 ?
: Q0 O0 `8 F9 ?8 K13.3为SimpleCache和HBase牵线搭桥
, g; Y! l5 W4 C3 N' j! j2 a
) ~) O+ v( W' ^13.3.1Erlang方面:sc_hbase.erl( u: B7 V& J& |/ Z9 Q2 B
* y2 N4 D8 ?; }$ b+ P: v* S, `13.3.2HBaseConnector类! {+ `3 p3 E6 U! t6 p5 d& O9 C
7 q" Y# G# @ D13.3.3Java中的消息处理
: r+ }& I D" R! l' l0 j+ p
/ s% j- f% y. y* x' _% T6 N& `13.3.4HBaseTask类
$ _ n' C9 @7 c: R
. x9 e0 g& r* K3 |) w2 E2 l13.4在SimpleCache中整合HBase
* F- {% ], q! b: ^, U( j
" |3 ?+ s" K+ S$ r$ b1 R13.4.1查询
8 Q% i" H* a) e6 E9 e& |2 }5 w+ U3 o5 I0 X3 W# s4 X/ D
13.4.2插入 java8.com
8 e O& q6 `, J' L) W
* ]. Q0 W1 {4 k; t3 e13.4.3删除
5 p8 I# @4 [+ F' W c6 v5 Q1 g
* _& _: e3 I& S0 p: B6 n: R! \13.5运行集成系统
% l2 P2 m+ L8 f4 K# v4 y- ~9 N
' |1 o( s2 Z) m; h$ K13.6小结) x' C0 M2 i7 ?' k
% z7 k1 _3 W, J
4 R* I# Q/ K; a7 m; a( N0 r! q+ N
# G# s& X: D H2 N/ Y5 |+ v. v第14章优化与性能
+ a9 p: Y, I! X5 `3 M: C2 v2 K0 H/ k
1 j9 g$ s$ Q, @. E14.1如何进行性能调优
8 h0 a9 Q$ f. t$ _; H$ K6 [9 ^7 h2 O' C {' L8 O: w
14.1.1设定性能目标
4 V+ s; Z: W6 o: |$ ^8 k$ E7 a) T% p. X/ L5 u4 F- K
14.1.2设定基线
4 F( c2 q! e8 E3 u M; ?* e% X9 o* b6 K Y8 w% y* n( _; A- E* y
14.1.3系统性能分析# \, Y, H! x4 {4 z m- s
/ D2 i' f- k: ?9 i# v$ g14.1.4确定需要解决的问题
& x8 t: n( m( q$ B* R# f
1 m' V2 j9 c2 o7 `2 s14.1.5测定优化成果' O. O3 a% W5 ?
+ I3 X. ]! ]+ p: E3 u14.2Erlang代码性能分析$ n' N2 g7 v) I, _7 t+ s% K
: J3 v. r. n2 ~
14.2.1用cprof计算调用次数2 J; f/ p" [/ o. N& @
8 b5 o9 p! @5 @ t/ O9 h14.2.2用fprof测定执行时间) r. ^9 b, n, h2 E
& H. `- s/ {& k; u4 d14.3Erlang编程语言的缺陷: ~, p/ H+ r2 h( \1 o0 X8 _
3 L# U5 e4 o! a& ~, Y14.3.1基本数据类型的性能特点
: Q r; E! t" h) ^! X
- A( d& d9 _5 y14.3.2内置函数和运算符的性能: i3 A0 n8 K; P2 [; z% U
! ?9 M, T& {( T. V: C: G
14.3.3函数
! K* Q* w j& e7 s2 o% }% {( \! ]7 |9 Z, @' H
14.3.4进程4 A P! v& K3 S" J
7 C+ _( f8 t+ S l; k
14.4小结/ F1 W* k, z, C' f2 c
+ ]+ c0 |7 V6 @4 T% j/ [( i
附录A安装Erlang0 I3 V. c. t) l& }2 Y9 ~
0 I/ M' r+ s$ C0 i附录B列表与引用透明性# r* b# V5 G* o! V% [+ U. T
$ d; m/ ^% ]2 n1 v* {3 U+ T* Z7 E. `7 M0 e4 p
7 p$ e, X' H- m- U& ~# Y
百度云盘下载地址(完全免费-绝无套路):
8 D$ g- j, W' {, T0 l/ K+ n( q1 B3 @, F- D) V3 |9 p
9 R, U: y0 v/ w- h8 |- d" \
# i# L! I( \3 O ^& v7 s0 O: j
: f x1 q. C/ U& \* t2 _( J& n1 E5 n" F" B
& {. c% }; i3 _
8 i" R% S) N' P0 o& {" _
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|