Erlang
文章平均质量分 54
erlang
食鱼酱
一只努力向上的程序员
展开
-
mnesia存储过程(dump)
1.表类型为disc_copies和disc_only_copies的操作会记录到latest.log中2.dump操作会将latest.log的数据转存并落地disc_copies类型会转存到.DCD和.DCL文件(通过disk_log.erl实现)ram_copies和disc_only_copies类型不在dump中处理3.dump的触发时机1. 手动执行mnesia:dump_log/02. 通过mnesia_controller定时触发dumpmnesia_controller.原创 2021-01-21 15:13:02 · 609 阅读 · 0 评论 -
erlang数据类型的c源码解析(4)-map
1、前言本文讲到的map是OTP17版本的map,OTP18进行一次map的优化。在erl_map.h中有结构体的定义,代码如下:typedef struct map_s { Eterm thing_word; Uint size; Eterm keys; /* tuple */} map_t;/* map node * * Keys是一个tuple,存储着所有的Key * 紧跟结构体后面的一块连续内存用于存储对应的Val * -----------原创 2020-11-13 11:04:09 · 598 阅读 · 1 评论 -
erlang数据类型的c源码解析(3)-tuple
1、前言在erlang数据类型的c源码解析(1)-Eterm讲到,当Eterm的低2位为10B时,为Boxed(装箱)类型。tuple是Boxed类型中的一种。低2位外的位数用来表示一个指向arityval的指针。arityval的定义如下如下:// 低2位为00B,Header类型#define ARITYVAL_SUBTAG (0x0 << _TAG_PRIMARY_SIZE) /* TUPLE */为arityval是一块连续内存空间,可以当作是C语言的数组,且数组首部元素原创 2020-11-12 20:27:51 · 806 阅读 · 0 评论 -
erlang数据类型的c源码解析(2)-list
1、前言在erlang数据类型的c源码解析(1)-Eterm讲到,当Eterm的低2位为10B时,就是List类型,剩余的位数表示一个指向列表的指针。另外就是,先讲结论,有助于理解,Erlang中的List在C的层面上是一个链表。2、常识的宏定义CONS:一个链表节点CAR:一个链表结点的数据部分CDR:一个链表结点的Next指针#define CONS(hp, car, cdr) \ (CAR(hp)=(car), CDR(hp)=(cdr), make_list(hp))原创 2020-11-11 09:09:18 · 700 阅读 · 4 评论 -
erlang数据类型的c源码解析(1)-Eterm
1、Eterm是啥?Erlang的数据类型在C语言的层面都可以用Eterm来表示。原文注释: Eterm: A tagged erlang term (possibly 64 bits)此外,Eterm在sys.h中定义,可能是uint32,也可能是uint64,代码如下:#if SIZEOF_INT == 4typedef unsigned int Eterm;...#endif#if SIZEOF_VOID_P == SIZEOF_LONGtypedef unsigned long原创 2020-11-11 09:02:31 · 735 阅读 · 0 评论 -
游戏服务端开发-排行榜
开头排行榜几乎是每个网络游戏都有的系统,以下用Erlang以例,分享一种排行榜实现方式。结构每个排行榜对应一个actor,State使用如下结构:%% 通用排行榜结构-record(rank_list, { key = undefined, %% 排行榜的唯一key sort_list = [], %% [one_rank{}] 已经排好序的列表 ready_list = [], %% [one_rank{}] 待排序的列表 sort_time原创 2020-05-18 18:25:04 · 1389 阅读 · 1 评论 -
游戏服务端开发-AOI-九宫格法解析(附代码)
1-啥是AOIAOI全称Area Of Interest,中文就是感兴趣的区域,个人理解就是玩家关注的并且可视的地图区域。在RPG游戏中,玩家角色移动,攻击,放技能等操作都需要向其他玩家广播,但服务端由于性能原因,会避免往整张地图上的角色进行广播。为了把性能消耗降到最低,同时不影响玩家的游戏体验,就只会向玩家关注并感兴趣的区域,也就是AOI进行广播。2-AOI-网格法(九宫格)1# 建立坐...原创 2020-04-25 22:26:24 · 3507 阅读 · 0 评论 -
erlang进程池-poolboy源码分析
本文以作者提供的example.erl为入口进行分析地址 : https://github.com/devinus/poolboy-module(example).-behaviour(application).-behaviour(supervisor).-export([start/0, stop/0, squery/2, equery/3]).-export([start/2,...原创 2020-04-12 16:06:05 · 481 阅读 · 0 评论 -
erlang性能分析-eprof
Descriptioneprof是个时间相关的分析工具。可以统计某个进程在一段时间内的函数调用次数。使用eprof时,可能会影响程序的执行速度。Demostart() -> %% 启动eprof服务 eprof:start(), %% 监控self()执行函数的过程 eprof:profile([self()], ?MODULE, fibo, [15]), %% 分析...原创 2019-11-24 14:13:44 · 1562 阅读 · 0 评论 -
Erlang的SHA256WithRSA签名和验签
-spec rsa_sha256_sign(Content :: binary(), PriKey :: binary()) -> binary().rsa_sha256_sign(Content, PriKey) -> [Entry] = public_key:pem_decode(PriKey), RSAPriKey = public_key:pem_entry_...原创 2019-08-08 18:19:37 · 828 阅读 · 0 评论 -
Erlang正则匹配中文
1> "中国".[20013,22269]由上可知,我们的中文是以unicode编码的形式存在列表中的,因此,正则匹配只需匹配unicode码即可。对于unicode编码,我们一般习惯用16进制表示,比如匹配中文的正则表达式为 [\u4e00-\u9fa5],查文档可知,erlang的re模块中,16进制的表示方法\x{hex}, 因此就是 [\x{4e00}-\x{9fff}]。...原创 2019-07-05 20:28:48 · 686 阅读 · 0 评论 -
Erlang获取URL中的参数(解析URL)
%% 获取URL中的所有参数-spec get_all_url_params(URL :: list()) -> [{atom(), binary()}].get_all_url_params(URL) -> URL_1 = string:to_lower(URL), StartIndex = string:chr(URL_1, $?) + 1, case ...原创 2019-06-18 11:06:40 · 595 阅读 · 0 评论 -
Erlang--STDLIB:maps
Erlang——STDLIB: maps 的中文翻译翻译 2018-11-23 11:59:28 · 757 阅读 · 2 评论 -
游戏服务端开发-好友系统
好友系统几乎是每个网络游戏都有的系统,以下分享一种好友系统的具体实现方式。原创 2018-11-27 09:38:55 · 4130 阅读 · 3 评论 -
Erlang列表去除重复元素
Erlang列表去重的两种方法原创 2018-12-23 15:16:56 · 2173 阅读 · 1 评论 -
Erlang编码和解码json(jsx)
jsx是一个用于使用、生成和操作JSON的Erlang应用程序。原创 2019-01-22 14:29:30 · 2568 阅读 · 0 评论 -
Erlang--STDLIB:ets
原文地址:https://blog.csdn.net/yangxing_star/article/details/8709897模块ets模块摘要 内置的数据条目存贮描述该模块是erlang内置数据条目存贮BIF的接口.它具备在erlang运行系统中存贮大量数据的能力,并且访问数据的时间是常量级的。(在ordered_set中,访问数据的时间与数据量的对数成正比).数据被组织成可...转载 2019-05-29 11:05:24 · 282 阅读 · 0 评论 -
关于Erlang中ETS的查询与匹配(match, match_object, select)
1.ets:match/2以最常用的match函数为例子match(Tab, Pattern) -> [Match] Types: Tab = tid() | atom() Pattern = tuple() Match = [term()]Tab是ETS的tid()或ETS的表名;Pattern是一个匹配模式,是一...原创 2019-05-29 18:04:30 · 3066 阅读 · 0 评论 -
Erlang的安装与环境变量配置
一、为什么要学Erlang?与Java、C++这些传统的OOP语言语言,Erlang是一种COP(面向并发编程)的语言,随着互联网的普及,并发量越来越高,Erlang作为一门面向并发编程的语言,它天生就支持分布式和高并发,用武之地肯定会越来越多,出于好奇和兴趣,不妨学习一下。二、Erlang的安装下载以windows为例,先进入Erlang官网的下载界面,http://ww...原创 2018-09-10 15:25:17 · 15079 阅读 · 0 评论