在github上,关于erlang的一致性hash,有erlang-ryng和 hash_ring .在这里先聊下erlang-ryng这个. 在erlang-ryng的启动方式上,github上提供了原始的启动方式,即直接在erlang shell下输入 erl -pa ebin -run ryng manual_start

$ erl -pa ebin -run ryng manual_start
Erlang R16B02 (erts-5.10.3) [source] [64-bit] [smp:2:2] [async-threads:10] [kernel-poll:false] [dtrace]Eshell V5.10.3  (abort with ^G)
1> ryng:new_ring([{id, my_ring}]).
{ok,<0.47.0>}
2> ryng:add_node(my_ring, node0).
ok
3> %% weight = 1: counts as 2 when there's one other node of weight 0
3> ryng:add_node(my_ring, node1, 1).
ok
4> %% weight = 0, priority = 1: will only be selected if priority 0 is empty
4> ryng:add_node(my_ring, node2, 0, 1).
ok
5> ryng:sync_ring(my_ring).
ok
6> ryng:node_for(my_ring, erlang:now()).
{ok,node1}
7> ryng:node_for(my_ring, erlang:make_ref()).
{ok,node1}
8> ryng:node_for(my_ring, random:uniform()).
{ok,node1}
9> ryng:list_rings().
{ok,[{ryng_ring_v1,my_ring,sha,160,#Fun<ryng.2.107634887>,1461501637330902918203684832716283019655932542976,[{0,487167212443634306067894944238761006551977514325},{1,1461501637330902918203684832716283019655932542976}],[{0,3},{1,1}],16402,20499,true,undefined}]}
10> ryng:list_nodes(my_ring).
{ok,[{ryng_node_v1,node0,0,0},{ryng_node_v1,node1,0,1},{ryng_node_v1,node2,1,0}]}
11> ryng:balance_summary(my_ring).
{ok,[{0,node0,0.3333333333333333},{0,node1,0.6666666666666666},{1,node2,1.0}]}
12> ryng:balance_check(my_ring, 1000000).
{ok,{1000000,1281043,1.281043},[{node0,333425,0.333425},{node1,666575,0.666575}]}
13> ryng:del_node(my_ring, node1).
ok
14> ryng:sync_ring(my_ring).
ok
15> ryng:balance_summary(my_ring).
{ok,[{0,node0,1.0},{1,node2,1.0}]}
16> ryng:balance_check(my_ring, 1000000).
{ok,{1000000,1154860,1.15486},[{node0,1000000,1.0}]}
17> ryng:del_node(my_ring, node0).
ok
18> ryng:sync_ring(my_ring).
ok
19> ryng:balance_summary(my_ring).
{ok,[{1,node2,1.0}]}
20> ryng:balance_check(my_ring, 1000000).
{ok,{1000000,1157669,1.157669},[{node2,1000000,1.0}]}
21> ryng:rm_ring(my_ring).
ok
22> ryng:list_rings().
{ok,[]}

View Code

而-run ryng manual_start ,我们一般不这么用,而根据erlang shell的解释,-run Mod [Func [Arg1, Arg2, ...]](init flag) 解释为 Makes init call the specified function.

这样我们就明白了,使init调用这个指定函数. 而 这个ryng 模块的 manual_start 函数是干什么的呢?

进入代码看下:

%% @doc Manually start ryng and all dependencies.
-spec manual_start() -> ok.
manual_start() ->require([crypto, ryng]).

而require/2 这个函数的作用是做什么的呢?

%% @doc Start the given applications if they were not already started.
%% @private
-spec require(list(module())) -> ok.
require([]) ->ok;
require([App|Tail]) ->case application:start(App) ofok -> ok;{error, {already_started, App}} -> okend,require(Tail).

这样就依次启动了application,通过尾递归实现了。 这样的写法还是不错的,而我们在application启动的时候,一般都直接添加个application启动。

转载于:https://www.cnblogs.com/unqiang/p/6086436.html

关于erlang的-run 的启动参数相关推荐

  1. Erlang启动参数学习

    项目中脚本里大量使用erlang的启动参数配置,今天来学习一下关于erlang的启动参数 官方API 先贴出官方API的地址 前言 erlang启动参数主要有3种,分别是emulator flag, ...

  2. RabbitMQ启动参数具体含义

    本文详细说明了 rabbitmq 服务程序启动时配置参数的含义. [root@Betty mnt]# ps aux|grep rabbit root      3588  0.3  0.9 13342 ...

  3. 【原创】RabbitMQ启动参数具体含义

    2019独角兽企业重金招聘Python工程师标准>>> 本文详细说明了 rabbitmq 服务程序启动时配置参数的含义. [root@Betty mnt]# ps aux|grep ...

  4. java 启动参数_网红框架SpringBoot2.x之定制参数浅析(一)

    我们都知道,SpringBoot框架最吸引人的地方之一就是他针对各种框架组件集成都提供了缺省的配置,"零配置"集成和开发是它的终极目标.理论上你不做任何特殊配置,都可以启动项目. ...

  5. PHP性能调优---php-fpm - 启动参数及重要配置详解

    一,php-fpm的启动参数   #测试php-fpm配置 /usr/local/php/sbin/php-fpm -t /usr/local/php/sbin/php-fpm -c /usr/loc ...

  6. php-fpm 启动参数及重要配置详解

    2019独角兽企业重金招聘Python工程师标准>>> php-fpm 启动参数及重要配置详解 约定几个目录 /usr/local/php/sbin/php-fpm /usr/loc ...

  7. docker run后台启动命令_Docker命令详解之run

    RUN 命令 RUN 指令是用来执行命令行命令的,是最常用的指令之一. 命令格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 意思为:通过run命令创建 ...

  8. erl的启动参数分析

    关于erl的启动参数主要分为emulator flags, flags and plain arguments emulator flags:以'+'开头的启动参数,如+P, +W等用于控制模拟器的行 ...

  9. SpringBoot笔记:SpringBoot启动参数配置

    文章目录 目的 测试代码 配置文件配置 获取自定义参数 项目打包发布 修改启动配置 方式一:系统变量 方式二:命令行参数 springboot启动参数解释 目的 1.熟悉springboot多环境配置 ...

  10. 全志A33-修改linux kernel启动参数

    开发板:A33,运行linux-3.4.39 主机:Ubuntu 14.04 ---------------------------------------------- 1. 修改kernel启动参 ...

最新文章

  1. 中国AI专利申请量超美国,百度居国内首位
  2. TCP 为什么是三次握手,而不是两次或四次?
  3. 安全公司:苹果iOS10备份功能安全性比iOS9差很多
  4. 浅析堡垒机概念及工作原理(转)
  5. SAP最强大的定价过程
  6. 安卓入门系列-08四大组件之Activity
  7. 使用 cf push 部署应用到 SAP BTP 时遇到错误消息 No domains exist for route
  8. KingPaper初探ThinkPHP3.1.2之目录部署(二)
  9. 每周一书-2016年8月28日到9月4日获奖读者公布
  10. 站在BERT肩膀上的NLP新秀们(PART III)
  11. android studio grandle错误,flutter android studio构建失败
  12. 一枚比特币变换一台车,特斯拉与比特币还要绑定多久?
  13. cudnn7.6.5下载 solitairetheme8_233小游戏下载安装赚钱-233小游戏下载安装最新版v2.29.4.5...
  14. 计算机二级c选择题题库,全国计算机二级C选择题题库套
  15. C# 使用iTextSharp中间件打印PDF
  16. vue json对比 进行编辑
  17. [2019年国庆专题训练] dp专题训练
  18. 植物大战僵尸pak修改
  19. [ 重 新 预 习 ] Node.js搭建服务
  20. 【GDOI2019Day1模拟2019.4.28】爱乐之城

热门文章

  1. 螺旋测微器b类不确定度_数控铣床G02、G03圆弧指令,还能作为螺旋插补用于油槽加工!...
  2. java 多线程 int_java多线程问题
  3. 清华大学操作系统OS学习(十二)——信号量与管程
  4. MATLAB 距离函数及用法
  5. HIVE学习之(三)
  6. 操作系统 关于死锁的面试题
  7. ie选项 由于该计算机受到限制 本次操作已被取消,IE“Internet 选项”无法打开提示“由于该计算机受到限制本次操作已被取消”...
  8. 2021年各省高考试成绩查询,2021年各省高考成绩查询时间 什么时候出分
  9. C++ 函数重载 参数默认值可以不写
  10. 区块链 以太坊 智能合约 如何销毁 废弃 selfdestruct