在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.) [source] [-bit] [smp::] [async-threads:] [kernel-poll:false] [dtrace] Eshell V5.10.3 (abort with ^G)
> ryng:new_ring([{id, my_ring}]).
{ok,<0.47.>}
> ryng:add_node(my_ring, node0).
ok
> %% weight = : counts as when there's one other node of weight 0
> ryng:add_node(my_ring, node1, ).
ok
> %% weight = , priority = : will only be selected if priority is empty
> ryng:add_node(my_ring, node2, , ).
ok
> ryng:sync_ring(my_ring).
ok
> ryng:node_for(my_ring, erlang:now()).
{ok,node1}
> ryng:node_for(my_ring, erlang:make_ref()).
{ok,node1}
> ryng:node_for(my_ring, random:uniform()).
{ok,node1}
> ryng:list_rings().
{ok,[{ryng_ring_v1,my_ring,sha,,#Fun<ryng.2.107634887>,
,
[{,},
{,}],
[{,},{,}],
,,true,undefined}]}
> ryng:list_nodes(my_ring).
{ok,[{ryng_node_v1,node0,,},
{ryng_node_v1,node1,,},
{ryng_node_v1,node2,,}]}
> ryng:balance_summary(my_ring).
{ok,[{,node0,0.3333333333333333},
{,node1,0.6666666666666666},
{,node2,1.0}]}
> ryng:balance_check(my_ring, ).
{ok,{,,1.281043},
[{node0,,0.333425},{node1,,0.666575}]}
> ryng:del_node(my_ring, node1).
ok
> ryng:sync_ring(my_ring).
ok
> ryng:balance_summary(my_ring).
{ok,[{,node0,1.0},{,node2,1.0}]}
> ryng:balance_check(my_ring, ).
{ok,{,,1.15486},[{node0,,1.0}]}
> ryng:del_node(my_ring, node0).
ok
> ryng:sync_ring(my_ring).
ok
> ryng:balance_summary(my_ring).
{ok,[{,node2,1.0}]}
> ryng:balance_check(my_ring, ).
{ok,{,,1.157669},[{node2,,1.0}]}
> ryng:rm_ring(my_ring).
ok
> ryng:list_rings().
{ok,[]}

而-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) of
ok -> ok;
{error, {already_started, App}} -> ok
end,
require(Tail).

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

关于erlang的-run 的启动参数的更多相关文章

  1. erlang启动参数记录

    不管在erlang的shell下还是脚本里,启动参数都是非常有用的,抽空儿整理下erlang的常用启动参数: +A size   异步线程池的线程数,范围为0~1024,默认为10 +P Number ...

  2. 如何查看docker run启动参数命令

    通过runlike去查看一个容器的docker run启动参数 安装pip yum install -y python-pip 安装runlike pip install runlike 查看dock ...

  3. Eclipse启动参数

    from 网络 eclipse 启动参数 -clean2013-- : eclipse 启动参数介绍(如添加插件时,如果不显示,则使用eclipse -clean启动) 其实,Eclipse是一个可以 ...

  4. php配置php-fpm启动参数及配置详解

    约定几个目录 /usr/local/php/sbin/php-fpm/usr/local/php/etc/php-fpm.conf/usr/local/php/etc/php.ini一,php-fpm ...

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

    约定几个目录 /usr/local/php/sbin/php-fpm /usr/local/php/etc/php-fpm.conf /usr/local/php/etc/php.ini 一,php- ...

  6. linux下php-fpm 启动参数及重要配置

    约定几个目录 /usr/local/php/sbin/php-fpm/usr/local/php/etc/php-fpm.conf/usr/local/php/etc/php.iniI. php-fp ...

  7. NetBeansRCP-添加/修改NetBeans的JVM启动参数

    NetBeans运行的速度实在是不敢恭维.还好机器配置还可以,修改其JVM启动参数命令行,以期运行的更加顺畅. 那么如何修改NetBeans IDE的JVM参数呢? 1.到NetBeans IDE的安 ...

  8. JVM启动参数小结

    一:JVM启动参数共分为三类:         其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容:        其二是非标准参数(-X),指的是JVM底层的一些配置参数, ...

  9. [置顶] linux内核启动1-启动参数(启动参数的获取和处理,分析setup_arch)

    最近公司要求调试一个内核,启动时有问题,所以就花了一点时间看看内核启动. 看的过程中总结了一点东西,希望可以帮助大家调试内核. 当我开始看的时候,第一件事是从网上搜集资料,不看不知道,一看吓一跳!牛人 ...

随机推荐

  1. 在vscode中使用pylint-django插件解决pylint的一些不必要的错误提示【转】

    转自:http://www.cnblogs.com/chaojihexiang/p/6417835.html 微软的vscode编辑器是一个好东西,通过vscode编辑python程序非常的方便.推荐 ...

  2. Spring积累总结

    1.spring 的优点: 1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很 ...

  3. yii框架美化访问路径,去掉index.php/?r=部分

    一.找到配置文件(ps:advance高级模板) 在工程目录-> backend目录 或 frontend目录 -> config目录 -> main.php文件 -> 在 r ...

  4. LeetCode OJ-- Generate Parentheses *

    https://oj.leetcode.com/problems/generate-parentheses/ 输入n产生n个( ,n个 )组成的所有合法的括号组合. 现在纸上画画,找到规律: 1.每一 ...

  5. Codeforces 912E Prime Gift(预处理 + 双指针 + 二分答案)

    题目链接 Prime Gift 题意  给定一个素数集合,求第k小的数,满足这个数的所有质因子集合为给定的集合的子集. 保证答案不超过$10^{18}$ 考虑二分答案. 根据折半的思想,首先我们把这个 ...

  6. springboot 2.0.8 跳转html页面

    springboot项目创建链接 https://blog.csdn.net/q18771811872/article/details/88126835 springboot2.0 跳转jsp教程 h ...

  7. codeigniter 使用

    CodeIgniter系列 记录count和分页 对于某个表的不带条件的count,可以简单的用 $total = $this->db->count_all($table_name) 来获 ...

  8. mysql之创建数据库,创建数据表

    写在前面 项目中用到mysql数据库,之前也没用过mysql,今天就学下mysql的常用的语法,发现跟sql server的语法极其相似.用起来还是蛮简单的. 一个例子 1.创建一个名为School的 ...

  9. Hibernate get load的区别

    这两个函数都是用来从数据库中加载对象,其区别说起来主要有以下两点: 1.如果数据库中不存在该对象,那么load是抛出一个ObjectNotFound的异常,而get是返回一个空指针 2.加载机制不同 ...

  10. Docker 开源管理工具集锦

    俗话说工欲善其事.必先利其器.Docker 是一种详细的虚拟化技术,Docker 尽管以RestAPI形式提供服务.但在实际生产环境中,管理大规模集群部署的Docker容器确实是一个巨大的挑战.尽管D ...