在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. javascript屏蔽脏字

    原文发布时间为:2009-04-16 -- 来源于本人的百度文章 [由搬家工具导入] <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...

  2. C#图解教程学习笔记——接口

    一.接口概念接口是指定一组函数成员而不实现它们的引用类型.所以只能类和结构来实现接口. 二.声明接口1. 接口声明不能包含:数据成员.静态成员,只能包含以下类型的非静态成员函数:方法.属性.事件.索引 ...

  3. (5)ASP.NET HTML服务器控件

    工具箱 与服务端交互 <body> <form id="form1" runat="server"> <div> <% ...

  4. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛【待补】

    [链接]:https://www.nowcoder.com/acm/contest/90#question

  5. 解决: g++: internal compiler error: Killed (program cc1plus)

    现象描述:在树莓派上用qt编译二维码显示相关的UI程序时,经常报以上错误,有时候断电重启首次编译不会报错(估计是刚上电系统占用的内存比较少) g++: internal compiler error: ...

  6. codeigniter视图

    怎么加载视图? 例如我们有一个视图在 application/views/welcome.php public function index() { $this->load->view(' ...

  7. asp.net上传文件夹权限配置以及权限配置的分析

    切记:一定要禁止给公共上传文件夹的权限设置为everyone,且为完全控制!除非你这个文件夹属于内部操作的,那这样做是允许,其余情况一律禁止! 基本的文件上传文件夹权限配置: 1.在需要配置上传的文件 ...

  8. 记录一次eclipse的错误:“server tomcat v7.0 server at localhost was unable to start within 45 seconds”的问题解决思路

    如果配到上述问题,可以参考网上查找的方法,如下: http://stackoverflow.com/questions/6468520/server-tomcat-v6-0-server-at-loc ...

  9. 命令提示符中运行SQL Server 2005

      使用 sqlcmd 实用工具,可以在命令提示符处.SQLCMD 模式下的查询编辑器.Windows 脚本文件或 SQL Server 代理作业的操作系统 (Cmd.exe) 作业步骤中,输入 Tr ...

  10. 【IntelliJ IDEA】代码中出现Usage of API documented as @since 1.8+ more..

    在idea中写代码过程中.有这种报错出现: Usage of API documented as @since 1.8+ more.. 修改JDK版本的几个地方 最后,在pom.xml文件中添加: & ...