标签分类 热门分类
当前位置:首页 > 程序设计电子书 > OTP开发电子书网盘下载
Erlang/OTP并发编程实战 Erlang/OTP并发编程实战
jefurry

jefurry 提供上传

资源
20
粉丝
34
喜欢
158
评论
5

    Erlang/OTP并发编程实战 PDF 完整版

    OTP开发电子书
    • 发布时间:

    给大家带来的一篇关于OTP开发相关的电子书资源,介绍了关于Erlang、OTP、并发编程、实战方面的内容,本书是由人民邮电出版社出版,格式为PDF,资源大小48.7 MB,Martin Logan,[美]Eric编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:7.8,更多相关的学习资源可以参阅 程序设计电子书、等栏目。

  • Erlang/OTP并发编程实战 PDF 下载
  • 下载地址:https://pan.baidu.com/s/1PxdTXlF4VWFLnssHg3TlH
  • 分享码:lrw9
  • Erlang/OTP并发编程实战 PDF

    Erlang/OTP并发编程实战》偏重于生产环境下的Erlang开发设计,关键解读怎样搭建平稳、版本控制优良、可维护保养的商品级编码,汇集了三位Erlang大師很多年的项目经验。 《Erlang/OTP并发编程实战》关键分成三绝大多数:第一一部分解读Erlang编程及OTP基本;第二一部分解读怎样在实际上开发设计中逐一加上OTP高級特点,进而健全运用,创作者根据围绕这书的主新项目——加快Web浏览的分布式系统缓存文件运用,从入门到精通地表明了实践活动中的各种各样方法;第三一部分探讨如何把编码与其他软件和客户集成化,及其怎样开展特性调优。 《Erlang/OTP并发编程实战》朝向Erlang程序猿,及其对Erlang/OTP很感兴趣的开发者。

    目录

    • 第一部分 Erlang起步:OTP基础
    • 第1章 Erlang/OTP平台 2
    • 1.1 基于进程的并发编程 3
    • 1.1.1 理解并发 3
    • 1.1.2 Erlang的进程模型 4
    • 1.1.3 4种进程通信范式 5
    • 1.1.4 用Erlang进程编程 8
    • 1.2 Erlang的容错架构 10
    • 1.2.1 进程链接如何工作 10
    • 1.2.2 监督与退出信号捕捉 10
    • 1.2.3 进程的分层容错 12
    • 1.3 分布式Erlang 13
    • 1.4 Erlang运行时系统和虚拟机 13
    • 1.4.1 调度器 14
    • 1.4.2 I/O与调度 15
    • 1.4.3 进程隔离与垃圾回收器 15
    • 1.5 函数式编程:Erlang的处世之道 16
    • 1.6 小结 16
    • 第2章 Erlang语言精要 18
    • 2.1 Erlang shell 19
    • 2.1.1 启动shell 19
    • 2.1.2 输入表达式 20
    • 2.1.3 shell函数 21
    • 2.1.4 退出shell 21
    • 2.1.5 任务控制基础 22
    • 2.2 Erlang的数据类型 23
    • 2.2.1 数值与算术运算 24
    • 2.2.2 二进制串与位串 25
    • 2.2.3 原子 26
    • 2.2.4 元组 27
    • 2.2.5 列表 27
    • 2.2.6 字符串 28
    • 2.2.7 pid、端口和引用 29
    • 2.2.8 将函数视作数据:fun函数 30
    • 2.2.9 项式的比较 30
    • 2.2.10 解读列表 31
    • 2.3 模块和函数 33
    • 2.3.1 调用其他模块中的函数(远程调用) 33
    • 2.3.2 不同元数的函数 34
    • 2.3.3 内置函数和标准库模块 34
    • 2.3.4 创建模块 35
    • 2.3.5 模块的编译和加载 36
    • 2.3.6 独立编译器erlc 37
    • 2.3.7 已编译模块与在shell中求值 37
    • 2.4 变量与模式匹配 38
    • 2.4.1 变量的语法 39
    • 2.4.2 单次赋值 39
    • 2.4.3 模式匹配:加强版的赋值 41
    • 2.4.4 解读模式 42
    • 2.5 函数与子句 44
    • 2.5.1 带副作用的函数:文本打印 44
    • 2.5.2 用模式匹配在多个子句中进行选择 45
    • 2.5.3 保护式 46
    • 2.5.4 模式、子句和变量作用域 47
    • 2.6 Case和if表达式 48
    • 2.6.1 Erlang的布尔型if-then-else分支选择 48
    • 2.6.2 If表达式 49
    • 2.7 fun函数 49
    • 2.7.1 作为现有函数别名的fun函数 49
    • 2.7.2 匿名fun函数 50
    • 2.8 异常与try/catch 52
    • 2.8.1 抛出(触发)异常 52
    • 2.8.2 运用try...catch 53
    • 2.8.3 try...of...catch 53
    • 2.8.4 after 54
    • 2.8.5 获取栈轨迹 54
    • 2.8.6 重抛异常 55
    • 2.8.7 传统的catch 55
    • 2.9 列表速构 56
    • 2.9.1 列表速构记法 56
    • 2.9.2 映射、过滤和模式匹配 56
    • 2.10 比特位语法与位串速构 57
    • 2.10.1 构造位串 57
    • 2.10.2 比特位语法中的模式匹配 58
    • 2.10.3 位串速构 59
    • 2.11 记录语法 59
    • 2.11.1 记录声明 60
    • 2.11.2 创建记录 60
    • 2.11.3 记录的字段以及模式匹配 60
    • 2.11.4 更新记录字段 60
    • 2.11.5 记录声明应该放在哪儿 61
    • 2.12 预处理与文件包含 61
    • 2.12.1 宏的定义和使用 61
    • 2.12.2 文件包含 62
    • 2.12.3 条件编译 63
    • 2.13 进程 64
    • 2.13.1 操纵进程 64
    • 2.13.2 消息接收与选择性接收 65
    • 2.13.3 注册进程 66
    • 2.13.4 消息投递与信号 67
    • 2.13.5 进程字典 67
    • 2.14 ETS表 68
    • 2.14.1 为何ETS表被设计成这样 68
    • 2.14.2 ETS表的基本用法 68
    • 2.15 以递归代替循环 69
    • 2.15.1 从迭代到递归 69
    • 2.15.2 理解尾递归 71
    • 2.15.3 累加器参数 72
    • 2.15.4 谈谈效率 72
    • 2.15.5 编写递归函数的窍门 73
    • 2.16 Erlang编程资源 78
    • 2.16.1 图书 78
    • 2.16.2 在线资料 79
    • 2.17 小结 79
    • 第3章 开发基于TCP的RPC服务 80
    • 3.1 你所创建的是什么 81
    • 3.1.1 基础知识提醒 82
    • 3.1.2 行为模式基础 82
    • 3.2 实现RPC服务器 85
    • 3.2.1 行为模式实现模块的典型布局 85
    • 3.2.2 模块首部 85
    • 3.2.3 API段 88
    • 3.2.4 回调函数段 92
    • 3.3 运行RPC服务器 98
    • 3.4 浅谈测试 99
    • 3.5 小结 100
    • 第4章 OTP应用与监督机制 101
    • 4.1 OTP应用 101
    • 4.1.1 OTP应用的组织形式 102
    • 4.1.2 为应用添加元数据 103
    • 4.1.3 应用行为模式 104
    • 4.1.4 应用结构小结 105
    • 4.2 用监督者实现容错 105
    • 4.2.1 实现监督者 106
    • 4.2.2 监督者重启策略 107
    • 4.2.3 编写子进程规范 108
    • 4.3 启动应用 109
    • 4.4 生成EDoc文档 110
    • 4.5 小结 110
    • 第5章 主要图形化监测工具的使用 112
    • 5.1 Appmon 112
    • 5.1.1 Appmon GUI 112
    • 5.1.2 WebTool版Appmon 115
    • 5.2 Pman 116
    • 5.3 调试器 118
    • 5.4 表查看器TV 121
    • 5.5 工具栏 123
    • 5.6 小结 123
    • 第二部分 构建生产系统
    • 第6章 打造一套缓存系统 126
    • 6.1 故事背景 126
    • 6.2 缓存的设计 127
    • 6.3 创建OTP应用的基本骨架 130
    • 6.3.1 应用目录结构的布局 130
    • 6.3.2 创建应用元数据 130
    • 6.3.3 实现应用行为模式 131
    • 6.3.4 实现监督者 131
    • 6.4 从应用骨架到五脏俱全的缓存 133
    • 6.4.1 编写sc_element进程 134
    • 6.4.2 实现sc_store模块 138
    • 6.4.3 打造应用层API模块 142
    • 6.5 小结 144
    • 第7章 Erlang/OTP中的日志与事件处理 145
    • 7.1 Erlang/OTP中的日志 146
    • 7.1.1 日志概述 146
    • 7.1.2 Erlang/OTP内置的日志设施 147
    • 7.1.3 标准日志函数 147
    • 7.1.4 SASL与崩溃报告 149
    • 7.2 用gen_event编写自定义事件处理器 153
    • 7.2.1 gen_event行为模式简介 153
    • 7.2.2 事件处理器示例 154
    • 7.2.3 处理错误事件 155
    • 7.3 为Simple Cache添加自定义事件流 157
    • 7.3.1 事件流API 157
    • 7.3.2 将处理器整合进Simple Cache 159
    • 7.3.3 订阅自定义事件流 161
    • 7.4 小结 162
    • 第8章 分布式Erlang/OTP简介 163
    • 8.1 Erlang分布式基础 163
    • 8.1.1 复制式进程间通信 164
    • 8.1.2 位置透明性 165
    • 8.2 节点与集群 166
    • 8.2.1 节点的启动 166
    • 8.2.2 节点的互联 167
    • 8.2.3 Erlang节点如何定位其他节点并与之建立通信 169
    • 8.2.4 magic cookie安全系统 170
    • 8.2.5 互联节点间的消息传递 171
    • 8.2.6 使用远程shell 173
    • 8.3 资源探测攻略 175
    • 8.3.1 术语 175
    • 8.3.2 算法 176
    • 8.3.3 实现资源探测应用 177
    • 8.4 小结 182
    • 第9章 用Mnesia为cache增加分布式支持 183
    • 9.1 分布式缓存 184
    • 9.1.1 选取通信策略 184
    • 9.1.2 同步缓存和异步缓存 186
    • 9.1.3 分布式表 188
    • 9.2 用Mnesia实现分布式数据存储 189
    • 9.2.1 建立项目数据库 189
    • 9.2.2 初始化数据库 191
    • 9.2.3 建表 192
    • 9.2.4 向表中录入数据 195
    • 9.2.5 执行基本查询 197
    • 9.3 基于Mnesia的分布式缓存 199
    • 9.3.1 用Mnesia取代ETS 199
    • 9.3.2 让缓存识别出其他节点 202
    • 9.3.3 用资源探测定位其他缓存实例 205
    • 9.3.4 动态复制Mnesia表 206
    • 9.4 小结 209
    • 第10章 打包、服务和部署 210
    • 10.1 从系统的角度看应用 210
    • 10.1.1 结构 211
    • 10.1.2 元数据 211
    • 10.1.3 系统如何管理运行中的应用 212
    • 10.2 制作发布镜像 213
    • 10.2.1 发布镜像 213
    • 10.2.2 准备发布代码 214
    • 10.2.3 发布镜像的元数据文件 214
    • 10.2.4 脚本与启动文件 216
    • 10.2.5 系统配置 217
    • 10.2.6 启动目标系统 218
    • 10.3 发布镜像打包 219
    • 10.3.1 创建发布镜像包 219
    • 10.3.2 发布镜像包的内容 220
    • 10.3.3 定制发布镜像包 222
    • 10.4 安装发布镜像 223
    • 10.5 小结 223
    • 第三部分 集成与完善
    • 第11章 为缓存添加HTTP接口 226
    • 11.1 实现TCP服务器 226
    • 11.1.1 高效TCP服务器的设计模式 227
    • 11.1.2 搭建tcp_interface应用的骨架 228
    • 11.1.3 填充TCP服务器的实现逻辑 228
    • 11.1.4 简单文本协议 231
    • 11.1.5 文本接口实现 232
    • 11.2 打造一套全新的Web接口 234
    • 11.2.1 HTTP简介 234
    • 11.2.2 实现一套通用的Web服务器行为模式 237
    • 11.2.3 初识REST 248
    • 11.2.4 用gen_web_server实现REST式协议 249
    • 11.3 小结 252
    • 第12章 用端口和NIF集成外围代码 253
    • 12.1 端口和NIF 254
    • 12.1.1 普通端口 255
    • 12.1.2 链入式端口驱动 256
    • 12.1.3 原生函数(NIF) 257
    • 12.2 用端口来集成解析器 257
    • 12.2.1 Erlang方面的端口 257
    • 12.2.2 C方面的端口 260
    • 12.2.3 编译运行 271
    • 12.3 开发链入式驱动 272
    • 12.3.1 初识链入式驱动 273
    • 12.3.2 驱动的C语言部分 274
    • 12.3.3 编译驱动代码 278
    • 12.3.4 驱动的Erlang部分 279
    • 12.4 将解析器实现为NIF 280
    • 12.4.1 NIF的Erlang部分 280
    • 12.4.2 NIF的C代码部分 281
    • 12.4.3 编译与运行代码 287
    • 12.5 小结 288
    • 第13章 用Jinterface实现Erlang和Java间的通信 289
    • 13.1 利用Jinterface在Erlang中集成Java 290
    • 13.1.1 OtpNode类 290
    • 13.1.2 OtpMbox类 291
    • 13.1.3 Erlang数据结构的Java映射 291
    • 13.1.4 示例:Java中的消息处理 292
    • 13.1.5 在Erlang中与Java节点通信 294
    • 13.2 安装和配置HBase 296
    • 13.2.1 下载和安装 296
    • 13.2.2 配置HBase 296
    • 13.3 为Simple Cache和HBase牵线搭桥 297
    • 13.3.1 Erlang方面:sc_hbase.erl 298
    • 13.3.2 HBaseConnector类 299
    • 13.3.3 Java中的消息处理 301
    • 13.3.4 HBaseTask类 304
    • 13.4 在Simple Cache中整合HBase 306
    • 13.4.1 查询 306
    • 13.4.2 插入 307
    • 13.4.3 删除 307
    • 13.5 运行集成系统 308
    • 13.6 小结 310
    • 第14章 优化与性能 311
    • 14.1 如何进行性能调优 312
    • 14.1.1 设定性能目标 312
    • 14.1.2 设定基线 313
    • 14.1.3 系统性能分析 313
    • 14.1.4 确定需要解决的问题 313
    • 14.1.5 测定优化成果 313
    • 14.2 Erlang代码性能分析 314
    • 14.2.1 用cprof计算调用次数 314
    • 14.2.2 用fprof测定执行时间 316
    • 14.3 Erlang编程语言的缺陷 320
    • 14.3.1 基本数据类型的性能特点 321
    • 14.3.2 内置函数和运算符的性能 324
    • 14.3.3 函数 325
    • 14.3.4 进程 327
    • 14.4 小结 329
    • 附录A 安装Erlang 330
    • 附录B 列表与引用透明性 332

    上一篇:R语言实战  下一篇:Hadoop大数据实战权威指南

    展开 +

    收起 -

    OTP开发 相关电子书
    关于OTP开发的学习笔记
    网友NO.154766

    Java多线程编程实战之模拟大量数据同步

    背景 最近对于 Java 多线程做了一段时间的学习,笔者一直认为,学习东西就是要应用到实际的业务需求中的。否则要么无法深入理解,要么硬生生地套用技术只是达到炫技的效果。 不过笔者仍旧认为自己对于多线程掌握不够熟练,不敢轻易应用到生产代码中。这就按照平时工作中遇到的实际问题,脑补了一个很可能存在的业务场景: 已知某公司管理着 1000 个微信服务号,每个服务号有 1w ~ 50w 粉丝不等。假设该公司每天都需要将所有微信服务号的粉丝数据通过调用微信 API 的方式更新到本地数据库。 需求分析 对此需求进行分析,主要存在以下问题: 单个服务号获取粉丝 id,只能每次 1w 按顺序拉取 微信的 API 对于服务商的并发请求数量有限制 单个服务号获取粉丝 id,只能每次 1w 按顺序拉取。这个问题决定了单个公众号在拉取粉丝 id 上,无法分配给多个线程执行。 微信的 API 对于服务商的并发请求数量有限制。这点最容易被忽略,如果我们同时有过多的请求,则会导致接口被封禁。这里可以通过信号量来控制同时执行的线程数量。 为了尽快完成数据同步,根据实际情况:整个数据同步可分为读数据和写数据两个部分。读数据是通过 API 获取,走网络 IO,速度较慢;写数据是写到数据库,速度较快。所以得出结论:需要分……

    网友NO.897991

    java图形界面编程实战代码

    关于Java图形化界面设计,基础知识网上可搜,下面简单介绍一下重点概念,然后就由浅入深代码实例。 程序是为了方便用户使用的,Java引入图形化界面编程。 1.JFrame 是容器类 2.AWT 是抽象窗口组件工具包,是 Java 最早的用于编写图形节目应用程序的开发包。 3.Swing 是为了解决 AWT 存在的问题而新开发的包,它以 AWT 为基础的。 代码实例1: package com.zhouzhou;//练习网格布局import java.awt.*;import javax.swing.*;public class Demo9 extends JFrame { // 定义组件 int size = 9; JButton jbs[] = new JButton[size]; public static void main(String[] args) { // 创建实例 Demo9 de = new Demo9(); } // 构造函数 public Demo9() { // 创建组件 for (int i = 0; i size; i++) { jbs[i] = new JButton(String.valueOf(i)); } // 设置网格布局,这里只有前两个参数(行/列)3和3 的话,网格没有空隙 this.setLayout(new GridLayout(3, 3, 10, 10)); // 添加组件 for (int i = 0; i size; i++) { this.add(jbs[i]); } // 设置窗体属性 this.setTitle("网格布局案例"); this.setSize(300, 400); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocation(200, 200); // 显示 this.setVisible(true); }} 代码实例2: package com.zhouzhou;import java.awt.*;import javax.swing.*;public class Demo10 extends JFrame { // 定义组件 JPanel jp1, jp2; JButton jb1, jb2, jb3, jb4, jb5, jb6; public static void main(String[] args) { // TODO Auto-generated metho……

    网友NO.823889

    Python编程实战之Oracle数据库操作示例

    本文实例讲述了Python编程实战之Oracle数据库操作。分享给大家供大家参考,具体如下: 1. 要想使Python可以操作Oracle数据库,首先需要安装cx_Oracle包,可以通过下面的地址来获取安装包 http://cx-oracle.sourceforge.net/ 2. 另外还需要oracle的一些类库,此时需要在运行python的机器上安装Oracle Instant Client软件包,可以通过下面地址获得 http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html 找到符合自己平台的包,然后安装,这里我使用的是rpm包,所以使用以下命令安装 $ sudo rpm -ivh oracle-instantclient11.2-basic-11.2.0.3.0-1.i386.rpm 装完毕后还需要设置一下环境变量,如下 $ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib/oracle/11.2/client/lib 3. 创建一个简单的python文件,测试安装是否成功 import cx_Oracleconn = cx_Oracle.connect('fkong/fkong@172.17.23.129/orcl')cursor = conn.cursor ()cursor.execute ("select * from dual")row = cursor.fetchone ()print row[0]cursor.close ()conn.close () 4. 下面看一个数据库建表和插入操作 import cx_Oracleconn = cx_Oracle.connect('fkong/fkong@172.17.23.129/orcl')cursor = conn.cursor ()cursor.execute ("CREATE TABLE TEST(ID INT, COL1 VARCHAR(32), COL2 VARCHAR(32), COL3 VARCHAR(32))")cursor.execute ("INSERT INTO TEST (ID, COL1, COL2, COL3)VALUES(1, 'a', 'b', 'c')")cursor.execute ("INSERT INTO TEST (ID, COL1, COL2, COL3)VALUES(2, 'aa', 'bb', 'cc')")curso……

    Copyright 2018-2019 xz577.com 码农之家

    版权责任说明