摘要: 20.1 如何在多核的CPU上更有效率的运行 20.1.1 使用大量进程 这个标准…显而易见。 20.1.2 避免副作用 因为存在副作用, 导致使用共享内存方式时必须使用锁机制, 虽然Erlang没有共享内存, 但对于可以被多个进程共享的ETS表和DETS表还是应该特别注意。 20.1.3 顺序瓶颈 阅读全文
posted @ 2020-08-24 11:24 养诚 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 类C语言因为都是基于状态共享的并发, 因此面对共享内存有着绕不过去的锁机制, 而Erlang采用基于消息传递的并发, 因此彻底消除了这个问题。 阅读全文
posted @ 2020-08-24 11:14 养诚 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 18.1 通用的事件处理 %% 创建一个注册名为Name的进程, 这个进程执行my_handler函数 make(Name) -> register(Name, spawn(fun() ->my_handler(fun no_op/1) end)). %% 等待事件处理 %% 如果是{event, 阅读全文
posted @ 2020-08-24 11:13 养诚 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 17.1 数据库查询 用于测试的表 %% apple 20 2.3 %% orange 100 3.8 %% pear 200 3.6 -record(shop, {item, quantity, cost}). %% apple 1.5 %% orange 2.4 %% pear 2.2 -rec 阅读全文
posted @ 2020-08-24 11:02 养诚 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 16.1 通用服务器程序的进化路线 16.1.1 server1: 原始服务器程序 服务端实现 -module(server1). -export([start/2, rpc/2]). %% 启动服务 start(Name, Mod) -> %% 注册进程名为Name, 并在启动进程时完成模块Mod 阅读全文
posted @ 2020-08-24 10:34 养诚 阅读(593) 评论(0) 推荐(0) 编辑
摘要: ETS和DETS都提供"键-值"搜索表, 只不过ETS驻留在内存而DETS驻留在磁盘, 因此ETS高效但数据存储是临时的, DETS数据存储是持久的且节省内存但比较低效。 15.1 表的基本操作 创建和打开表 ets:new或dets:open_file 插入表 insert(TableName, 阅读全文
posted @ 2020-08-24 10:17 养诚 阅读(645) 评论(0) 推荐(0) 编辑
摘要: 14.1 使用TCP 14.1.1 从服务器上获取数据 -module(socket_examples). -export([nano_get_url/0]). -import(lists, [reverse/1]). nano_get_url() -> nano_get_url("www.goog 阅读全文
posted @ 2020-08-24 10:12 养诚 阅读(243) 评论(0) 推荐(0) 编辑