`
rstevens
  • 浏览: 95654 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
端口是Erlang与外部程序通信的一种方式。 下图展现了端口与外部程序交互的方式。   OTP 常用的接口函数: 1、 打开端口 open_port/2   2、 通过端口,向外部程序发送数据 port_command   3、 通过端口,从外部程序接收数据 recieve end.   4、 关闭端口 port_close/0     "Write an Erlang Port using OTP Principles" 这篇文章,详细讲解了如何通过OTP来编写一个端口应用,并通过这个应用来与外部的程序通信。 http://www. ...
通过源码安装一个python包的时候,可通过 --home 或 --prefix 指定安装目录   python  setup.py install  --prefix=~/local      参看  http://docs.python.org/install/index.html   alternate installation  
    About This Guide This guide explains the AMQP 0-9-1 model used by RabbitMQ. The original version was written and kindly contributed by Michael Klishin and edited by Chris Duncan. High-level Overview of AMQP 0-9-1 and the AMQP Model What is AMQP? AMQP (Advanced Message Queuin ...
mnesia 是一个分布式的数据存储系统。 一个mnesia集群,有多个mnesia节点组成 mnesia节点之间互相联通 (如何联通?) 1、创建schema 在一个节点上,通过 mnesia:create_schema(NodeList), 在整个集群中,创建空的schema。NodeList指定了集群中所有的节点。 注意: 1)、schema只能创建一次 2)、实际上,每个节点都保存一份schema拷贝 2、 创建表 在一个节点上,通过 mnesia:create_table(),则创建一个分布式的表。 mnesia会自动将该表同步到节点中其它节点上。 每个节点,实际上还是维护的 ...
相对于其它语言,erlang的根本性的优势在于: 1、 面向并发的支持 它提供的创建大量进程能力,彻底改变了传统的多线程的编程模式。 在传统的编程语言中,为了做到高性能,提供并发处理能力,通常是通过多线程模型来解决。多线程必然会导致加锁的诸多问题,此外多线程程序对程序员自身的能力提出了更好的要求。 而erlang的多进程模型,使得并发任务处理变得很自然。 2、 面向分布式的支持 erlang的每个虚拟机都是一个节点 每个节点中可以跑很多进程 节点之间可以互相联通 可以控制任意一个节点中的进程 可以方便的与其它节点中的进程通信。 进程之间可以互相链接,互相监控 这个特性,也是其它所 ...
用erlang开发工业级产品的过程中,会碰到相似的问题域,例如监控、程序打包等等。 OTP 就是针对这些问题域的解决方案。 OTP包括如下部分: 1、 监控树 强大的监控能力,是erlang强于其它语言的核心所在; 所以基于erlang的应用,都应该具有监控功能,因此,OTP首先提供了supervisor模块,来解决这个共性问题。 在监控树种,包括监控进程和工作进程,所有进程链接成一个监控树。 2、 进程的行为 工作进程,通常具有相同的行为;OTP提炼出这些共同的行为,提供了三类主要的行为包,分别是 gen_server, gen_event, gen_fsm。 一个工作进程,通常采用 ...
第一版基础上,将echoserver融入OTP:gen_server框架 同时引入OPT:supervisor行为包,实现对 echoserver的监控模块 当 echoserver退出后,监控模块master可以重启之。 erlang的监控树绝对是精华所在,解决了分布式开发的一个重要的问题域 -module(es2). -behavior(gen_server). -export([start_link/0, stop/0]). -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/ ...
erlang实现的简单的echo server 采用每连接对应一个进程的模式 用到了 gen_tcp 模块、erlang的消息接收模型 -module(echoserver). -export([start/0, stop/0, server/0, handle_connect/3]). start() -> % 创建一个进程,运行 server() register(echoserver, spawn(?MODULE, server, [])). stop() -> echoserver ! {quit}. server( ...
通过“动画”菜单,可为页面配置展现的动画效果。 通过“自定义动画”,可进一步为页面内的元素配置动画效果。 例如页面内有两个元素,可从上而下展现第一个元素,鼠标单击后,再出现第二个元素。
无论 python, ruby, 还是 erlang, lua, 这几个比较新锐的语言,都支持函数式编程。 函数式编程到底具有哪些特点? 相对于传统的命令式语言,其优势在什么地方? 函数式编程,有如下几个特点: 1、  函数是第一类型。 函数像其它数据类型一样,可以被赋值,可以当做参数,也可以当做函数的返回值。 其实, C语言的函数,实质就是一种指针类型,因此我们可以说,C语言也是支持函数式编程的。 2、 函数的执行结果,只与传入的参数相关。 也就是说,只要传入的参数不变,那么函数的执行结果就是一定的,而不受其它条件影响。 这就要求我们,在函数内部,不要访问全局变量。 这点实质上是函数 ...
如果把Lua当做一门纯粹的脚本语言来使用,那它肯定比不上 python 强大高效;很多事情它也干不了。 使用Lua的唯一理由,是可以方便的潜入到其它语言中,特别是 C/C++,在提高复杂逻辑的开发效率的同时,性能上也不会损失太多。 因为Lua的解释器性能上非常好,Lua本身依赖的库也比较小。 Lua目前最适合的应用领域是游戏开发中的脚本 学习Lua,重点应该是研究如何配合C/C++提高开发效率。
调用 Lua的函数,跟其它语言没啥大的区别,都是类似 print("hello") 的形式,需要将参数放到一对圆括号中。 但是有一种例外情况,即: 一个函数若只有一个参数,且这个参数是一个字面字符串,或者是一个table 类型,那么圆括号可有可无。例如 print "hello" 是可以的。 但是 s = "hello" print s 是不可以的。 mytable = { 10, 11, 12} print mytable 是可以的。 或者是 print { 10, 11, 12} 也是可以的。 table 的 ...
1、 table 是 lua 中最重要的数据类型。 2、 table 类似于 python 中的字典。 3、 table 只能通过构造式来创建 例1: mytable = { a = 10, b = 11, c = 20, ddd = 30 } print(mytable["a"]) 注释: 1)、 table 中的每项要求是 key = value 的形式 2)、 key 只能是字符串, 这里的 a, b, c, ddd 都是字符串,但是不能加上引号 3)、 通过 key 来访问 table 的值,这时候, a 必须加上引号 例2: mytabl ...
descriptor 用与类的属性 descriptor 是一个类,需要提供 __set__, __get__, __del__ 三个方法的实现。 如果一个类的属性是 descriptor,那么: 该属性不会出现在该类实例化后的对象的__dict__中。也就是说,它部作为字典的一部分出现。 访问该属性时,调用descriptor的__get__()方法 设置该属性时,调用descriptor的__set__()方法 删除该属性时,调用descriptor的__del__()方法 也就是说,如果属性是descriptor,则劫持了对字典的访问。 descriptor 的好处是什么? 增 ...
首先保证我们拿到的是最新代码,运行svn update,假设是28版本。 然后找出要撤销的确切版本: svn log contacts.java 根据log怀疑是27版本改坏的,比较一下: svn diff -r 26:27 contacts.java 发现果真是27版本坏事。 撤销27版本的改动: svn merge -r 27:26 contacts.java 为了保险起见,再次确认合并的结果: svn diff contacts.java 发现已正确撤销了改动,提交。 提交改动 svn commit -m "Revert wrong change from r27 ...
Global site tag (gtag.js) - Google Analytics