
erlang
文章平均质量分 53
「已注销」
https://github.com/hongweikkx
展开
-
include include_lib 的区别
include 和 include_lib 的区别: include_lib类似于include,但不应该指出绝对文件。相反,第一个路径应该被假设为应用程序的名称。 例如:-include_lib(“kernel/include/file.hrl”). 代码服务器使用代码:lib_dir(kernel)来查找Kernel的当前(最新)版本的目录,然后搜索文件file.hrl的子目录。stack原创 2017-10-16 19:48:05 · 3084 阅读 · 0 评论 -
erlang 数据结构---proplists
erlang proplists原创 2017-10-16 16:11:48 · 2475 阅读 · 0 评论 -
erlang 数据结构--(ord)dict
1. 今天是dict 和 orddict都是key-value 数据机构dict 判断key是否等于用的是 =:=,也就是说1,1.0 是不同的key,而orddict判断等于用的是 == orddict 在learnyousomeerlang 上说的是适用于75个元素以下的数据量, 在之上可以用dict,或者gb_tree两个模块提供了相同的功能函数, 所以一起介绍。2. 函数值得注意原创 2017-10-17 15:10:08 · 1272 阅读 · 0 评论 -
erlang 数据结构 --maps
1. 今天是maps1.1. key-value 数据结构 1.2. 更好的模式匹配 2.操作:2.0 格式1> F = #{a => 1, b => 2}. #{a => 1,b => 2}2.1. 更新key-value=> 如果原本有key, 则更新, 如果没有key,就插入key-value; := 更新已有的key的value,如果原来没有key,就报错3> F1 = F#{a =>原创 2017-10-26 17:36:12 · 2067 阅读 · 0 评论 -
erlang 中间码
erlang 中间码1. core中间码的形成对于文件test.erl, 可以在编译的时候,加to_core 参数 c(test, [to_core]).2. 其他中间码的形成参考: erlang虚拟机代码执行原理原创 2017-11-06 17:23:24 · 362 阅读 · 0 评论 -
Erlang数据类型的内部实现
Erlang数据类型的内部实现: Erlang数据类型的表示和实现(5)——binary http://www.cnblogs.com/zhengsyao/p/erlang_eterm_implementation_5_binary.html Erlang数据类型的表示和实现(4)——boxed 对象 http://www.cnblogs.com/zhengsyao/p/erlang_ete原创 2017-12-22 19:39:47 · 560 阅读 · 0 评论 -
erlang 进程独占的可能性
erlang 进程独占的可能性erlang 的进程调度靠的是reduction,reduction的调用一般是在某一个原子或者基础指令调用完后才会调用, 如果减少至0,则进程切换。 所以进程并不是在任意指令下切换。那也就是说如果有某个命令没有调用到reduction, 这样也就不会进程切换, 就会出现进程独占的极端情况。所以应该避免耗时特别长,但是reduction又特别少的操作。 这些操作一般不会原创 2017-12-22 19:45:23 · 267 阅读 · 0 评论 -
erlang 的垃圾回收机制简介
erlang 的垃圾回收机制简介一. 所有垃圾回收方案引用计数: 与程序实时 更平缓标记清除: 内存耗尽时,清除不可达的内存空间,断崖式的增加(可能会导致实时性问题)节点复制: 分成两个半区, 内存消耗较大标记-整理分代 : 基于统计学、二. erlang 垃圾回收方案进程内的数据是通过分代来gc的 数据分为 minor gc(只对年轻一代) 和major gc(所有).原创 2017-12-22 19:53:01 · 743 阅读 · 0 评论 -
erlang function efficiency
erlang function efficiency1. match parttendomap(_Map, [], Ys) -> Ys;map(_Map, [_|_] = Xs, []) -> %% 1.1 do_not map(_Map, Xs, []) -> Xs;map(Map, [X | Xs], [Y|Ys]) -> [Map(X,Y) | map(Map, Xs,原创 2017-12-22 19:58:35 · 270 阅读 · 0 评论 -
redis - erlang 学习
redis - erlang 学习1. download rediswindows-exe:https://github.com/MSOpenTech/redis/releasesgit source: https://github.com/antirez/redis2. 启动 and 配置 and 简单熟悉网上有教程,可以很快的启动和简单配置 http://www.runoob.com原创 2017-12-29 16:48:37 · 637 阅读 · 0 评论 -
ETS 笔记
ets 笔记ets 是一张进程间可以共享的表 (pubic)ets 并不在gc的范围内如果创建的进程死亡, 数据也会 消失。 可以通过give_away 和 hire 来使得 ets不会随着创建进程的消亡而消亡。每个对象在查看和插入 的时候,都会导致对象的拷贝‘$end_of_table’ 不能被用作是keyset、 bag、dublicate_bag 的key 匹配是 match原创 2017-10-12 17:58:53 · 558 阅读 · 0 评论 -
erlang-面向函数的程序 面条 vs 馄饨
erlang-面向函数的程序 面条 vs 馄饨1. 如何解决面条式的代码?(面条:代码结构或者逻辑混乱如意大利面般)1. 变量命名2. 函数中一致性的抽象层次 (错误表象:一个函数有多于两层的嵌套或者缩进)3. 短小函数 (错误表象: 一眼望不到边的函数)4. 重复函数 (错误表象:有ctrl-c ctrl-v 的代码片段)2.如何解决函数过于短小导...原创 2018-03-07 16:21:10 · 325 阅读 · 0 评论 -
abstract_code 和erl文件的互相转换
erl <=> abstract_codeerl => abstract_codeerlc +debug_info test.erl{ok, {_, [{abstract_code, {_, Abs}}]}} = beam_lib:chunks(test, [abstract_code]).abstract_code => erlS = e...原创 2018-07-10 23:54:45 · 542 阅读 · 0 评论 -
Heap-Architectures-for-Concurrent-Languages-using-Message-Passing
设计并发语言的一个难点就在于运行时系统中存储结构的实现, 这里将讨论 依赖自动内存回收和通过异步消息传递实现并发的语言的运行时系统实现有三种可选择的内存堆结构。 1:每个进程分配和管理自己的内存区域, 所有在进程间的消息都必须拷贝。 2:有一个所有进程都共享的堆 3:一个混合的架构, 每个进程有自己的私有堆,同时有一个共享的堆用于类似于消息的数据发送.接下...翻译 2018-07-21 02:40:24 · 258 阅读 · 0 评论 -
hibernate and why gen_server2 ?
hibernate - 休眠1. 描述:使进程进入一个最小内存分配的等待状态。 如果这个进程并没有期望近期接收任何消息, 那么这个状态是有用的。2. 行为:会丢掉进程调用栈,然后 进行gc。 这样所有的活数据就会在一个连续的堆中。 这个堆大小几近相当于所有活数据的大小(即便这个大小小于最小进程堆大小) . 如果所有活数据大小小于最小进程堆大小的话,在醒来后就会发生一次g...原创 2018-07-27 11:40:43 · 313 阅读 · 0 评论 -
erlang 数据结构 -- queue
今天是队列1. 定义:双端队列, FIFO2. 实现:我们都写过用两个栈来实现一个队列, 而erlang queue的实现,就是用这种方法来做的。因为erlang lists 元素如果在前面插入是o(1), 而在后面加入时o(N) , 所以我们很少从后面加入元素或者从后面取元素, 很显然这就是栈的特性。3. 函数接口original API 包含了队列基本操作函数 而Extended API有更少原创 2017-10-24 16:36:41 · 1039 阅读 · 0 评论 -
erlang 数据结构-- 有向图
今天是有向图1. 涉及到图的有两个module, digraph.erl 和 digraph_utils.erldigraph.erl: 对边, 节点,路径等的操作 digraph_utils: 关于 遍历, 环和树的测试, 和找邻居 具体的函数,等用到的时候慢慢更新吧。2. 应用时踩的坑之前在写好友系统(单向好友)的时候,决定采用一种新的想法。因为单向好友,关注等,就像是有向图, 又有向图本身原创 2017-10-23 12:23:00 · 740 阅读 · 0 评论 -
erlang node
erlang node 节点问题总结原创 2017-10-13 17:38:13 · 652 阅读 · 0 评论 -
erlang 软件升级
软件升级:代码加载热更新当内存中的程序需要更新的时候, erlang VM 会维持两个版本, 一个是老版本 old , 一个是新版本 new. 在热更新的时候, 驻留在旧代码中的执行会继续执行旧的代码而其他情况下执行新的代码。 具体是:当函数调用为本地local 调原创 2016-04-15 23:21:19 · 4721 阅读 · 0 评论 -
erlang timer
erl + cerl +c 可以禁用系统时间变化所引起的补偿 通常状态下erlang:now/0 是不会把突然的时间变化反应到系统时间的,而是会进行慢性的调整, 这么做是为了保证timer的工作。加入 +c 后, erlang:now/0 会立即反应到系统时间上, 相应的timer的timeout 也可能会出现在错误的时间。timer 的函数总结erlang:start_timer(T原创 2016-04-15 23:39:57 · 679 阅读 · 0 评论 -
gen_event
简介gen_event 是OTP 中的事件管理器,可以向现有或者我们生成的一个gen_event 进程注册增加或者减少一个事件处理(a callback module), 当我们向该进程notify一个事件时,每个注册的事件处理都会收到该事件,然后进行相应的处理。Note that an event manager does trap exit signals automatically下面是原创 2016-06-26 15:53:29 · 355 阅读 · 0 评论 -
erlang实现堆
用erlang实现堆堆概念:一颗完全二叉树, 且根节点的关键字大于或者等于左右子树的关键字值。erlang实现的比较好的一个开源代码qhool/heap 使用tuple来实现 支持的接口 效率 1. from_list to_list(sorted) 2. min max 时间复杂度 o(1) 3. take_min,原创 2017-04-13 21:19:11 · 506 阅读 · 0 评论 -
erlang和外围程序的交互
erlang 和 外围程序的交互普通端口方式外围程序是独立的操作系统程序, 通过标准输入和输出和erlang 交互, 一个在erlang虚拟机中运行, 另一个和虚拟机的运行不在同一个地址空间内。 具体就是erlang vm 通过port -> 标准输入, 然后外围程序读取标准输入,然后处理, 输出到标准输出, 然后erlang vm 接收到标准输出, 即标准输出 -> port。 link原创 2017-04-13 21:26:08 · 408 阅读 · 0 评论 -
gen_server
gen_server 概述原创 2016-04-15 23:54:48 · 796 阅读 · 0 评论 -
trap or not 对于link 时产生的不同的错误信息
进程在link时exception,trap or not 所产生的报错信息原创 2017-08-10 17:51:10 · 389 阅读 · 0 评论 -
erlang 数据结构 -- gb_trees
erlang gb_trees 使用场景原创 2017-10-18 11:21:01 · 1032 阅读 · 0 评论 -
erlang 数据机构 -- array
erlang array原创 2017-10-19 13:07:40 · 765 阅读 · 0 评论 -
erlang 数据结构总结
erlang 数据结构总结1. key-value 类型proplist 比较特殊, 一般应用于config 的读取, orderdict 适用于少量数据,一般小于75个元素, 如果大于75, 你需要切换到其他的数据结构中, 如dict, gb_trees, array 并不像其他语言的数组一样拥有常数数量级的读取,没有什么优势,所以很少使用. maps -未来可能会替换records- ,原创 2017-10-27 11:02:59 · 582 阅读 · 0 评论 -
erlang数据结构-- sets
erlang sets ordsets gb_sets sofs原创 2017-10-20 11:19:19 · 1586 阅读 · 0 评论 -
erlang 读取utf-8 BOM 问题
erlang 读取utf-8 BOM 问题1. 问题自己在做一个erlang读取.csv(utf-8) 转化为.erl 文件的练手项目, 一直会遇到用 file:read_file/1读取出来的和实际在utf-8中的内容不一致原创 2017-11-07 17:26:43 · 408 阅读 · 0 评论 -
erlang c.erl
erlang c.erl原创 2017-10-13 17:01:19 · 794 阅读 · 0 评论 -
IOData
看项目代码的时候发现写入file的Info不是一个扁平化的list, 所以感觉很奇怪。 就看了一下file的文档 file:write_file(FileName, Bytes) -> ok|{error, Reason} Bytes = iodata() iodata() 文档中是这么定义的: iodata(): iolist()|binary binary():>原创 2018-08-24 19:59:49 · 1541 阅读 · 0 评论