![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Erlang
文章平均质量分 88
zhangxinrun_业余erlang
这个作者很懒,什么都没留下…
展开
-
erlang应用
<br />考虑到现有的项目使用erlang重写的复杂性和erlang对于某些数据库支持的弱点,想结合erlang的分布式、代码热加载、处理高并发方面的优势,和C++在性能上以及大量现有项目上的优势,实现集群部署。<br /><br />考察了erlang和C进行交互的几种方式,ports受限于物理服务器分布,port_driver没测试成功,应该也是受限于本机,最后选定C nodes方式。<br /><br />测试了c server和c client两种方式,感觉如果是server方式,还得用C写一套处转载 2011-03-19 23:47:00 · 1448 阅读 · 0 评论 -
轻量级线程和erlang
<br />线程通常用来执行并行计算,为大量阻塞操作增加并发度。在线程数大于CPU数时,线程会有额外的调度开销,所以线程数太多反而会使计算性能下降。计算机执行计算任务时,通常还需要与各种IO设备交互,这些设备和CPU、内存比起来慢几个数量级,一些任务还需要串行地使用这些设备,这时候使用多线程就可以有效利用这些设备资源。<br /><br />除了创建大量线程以外,还可以使用异步IO来完成同样的功能。异步IO原理上很简单,用户线程某一刻发起一个请求(对于IO来说通常只有读和写2种),在IO设备准备好的时候会回转载 2011-03-19 23:49:00 · 4440 阅读 · 2 评论 -
erlang的超轻量级进程是如何实现的
<br />在windows下做了实验,用erlang shell起60万个erlang进程,占用内存760多M,平均每个进程占用内存1.27K,创建每个进程的时间约4微秒。在配置好得多的linux服务器上,用pthread起线程,平均每个线程创建时间48微秒。<br />查了一下资料(http://www.erlang.org/pipermail/erlang-questions/2006-October/023258.html,http://lambda-the-ultimate.org/node/17转载 2011-03-19 22:34:00 · 3410 阅读 · 1 评论 -
erlang分布式节点通讯方式
<br />http://coderplay.javaeye.com/blog/94209<br /><br />早看到这个就好了,我也是用strace发现它用的是poll,顺便搞清楚了erlang的分布式节点通讯方式。<br /><br />erlang分布式节点通讯,A节点连接B节点,如果在同一机器上,只需要进程间通讯就可以找到节点。不在同一台机器上,A先连接B所在机器的4369端口,寻找节点。如果找到,就通知B节点监听一个端口,再回复A让它连接这个端口。<br /><br />监听4369端口的是个后转载 2011-03-19 23:49:00 · 5091 阅读 · 0 评论 -
RabbitMQ学习笔记(例子)
<br />合理使用消息队列(Messaging Queue)可大幅降低网络系统架构的耦合度和复杂度,让各集成部件拥有更灵活的自主弹性。同时异步处理机制在高性能和高可靠性上也有极佳的表现,是一种较理想的集成解决方案。<br /><br />在 ActiveMQ、ZeroMQ、RabbitMQ 之间徘徊许久,最终还是选择 RabbitMQ。ZeroMQ 和 RabbitMQ 都支持开源消息协议 AMQP,不过 ZeroMQ 暂时不支持消息持久化和崩溃恢复,且稳定度稍差。<br /><br />1. 基础概念<转载 2011-05-11 14:18:00 · 16202 阅读 · 2 评论 -
关于Erlang和SMP的一些说明
<br />原文:http://groups.google.com/group/erlang-questions/browse_thread/thread/7827f5e32681ca8e<br />by.Kenneth Erlang/OTP team, Ericsson<br />译:ShiningRay<br />以下是一些Erlang SMP实现的细节和与性能与伸缩性相关一些简单介绍。<br />几周之内还有有一个关于多核如何运作以及未来如何发展的更详细的介绍。我打算将一些内容放在我的报告中,将于9月转载 2011-03-19 23:07:00 · 1183 阅读 · 0 评论 -
Erlang 是什么
<br />Erlang 是什么 <br />一种“小众”语言(排名50之外) <br />一种函数式语言 (变量只能赋值一次) <br />一种动态类型语言(变量类型在运行时决定,代码需要编译后才能执行,与Python,Ruby等不一样) <br />一种强类型语言 <br />一种面向并发(Concurrency Oriented)的语言 <br /> <br />《一场茶杯里的风暴》(刊于《程序员》06年9、10期),《轻松实现可伸缩性,容错性,和负载平衡的大规模多人在线系统》是两篇极好的介绍性文章。转载 2011-03-19 23:42:00 · 1305 阅读 · 0 评论 -
Erlang简介
<br />Erlang的介绍比较散,又都很简单,所以多找点汇总一下:<br /><br />----------------------------------------------<br />我的印象:<br /><br />Erlang是一门FP语言,通常FP语言都不是OO语言,语法和prolog有些象,大量使用pattern match来简化编程,使用伪进程简化并发处理,也有拿它做AI的。一个简单的例子,从socket接收一个数据包,包括一个int字段,一个short字段,如何封/解包?Erlan转载 2011-03-19 23:47:00 · 1775 阅读 · 0 评论 -
Erlang动态编译加载模块
<br />转载:http://www.iteye.com/topic/482274<br /> <br />ejabberd最新的版本有个模块叫做 dynamic_compile, 支持从string动态加载一个模块。有了这个功能我们就可以很方便的动态生成一个模块,加入到我们的运行期。我想的有以下几个功能: <br /><br />1. const 模块 <br /><br />2. 如日志系统的级别: <br /><br />log(S) when 0 > 1 -> <br /> do_log(S转载 2011-05-12 10:54:00 · 2534 阅读 · 0 评论 -
erlang中的THIS变量?
<br />代码:<br />%% Author: Administrator<br />%% Created: 2011-5-15<br />%% Description: TODO: Add description to test1<br />-module(test1, [Name]).<br />%%<br />%% Include files<br />%%<br />%%<br />%% Exported Functions<br />%%<br />-export([aaa/0, main/0原创 2011-05-15 21:33:00 · 732 阅读 · 0 评论 -
未公开的erlang:port_s/get_data
<br />我们通常在使用port的时候, 需要把他同其他的上下文关联起来, 以便在port给我们发生数据的时候, 我们能根据绑定的上下文, 知道如何处理数据.<br />有2种办法:<br />1. 用ets来保存{Port, Ctx},这个比较慢, 每次都要查表.<br />2. 用Port本身的空间来保存Ctx. erlang:port_set_data 和erlang:port_get_data就是干这类事情的, 一步到位, 多核free.<br />不啰嗦上代码:view sourceprint?转载 2011-05-15 15:56:00 · 1666 阅读 · 1 评论 -
Erlang 的Socket编程
<br />介绍<br />英文原文<br />我学习 Erlang 已经有一段时间了,想的是做一个网络游戏之类的东西。然而,我没有找到一个适合我水平的像样的 Erlang socket 编程教程。因此我决定自己写一个。<br />我针对的是有一定编程经验的人,不过倒不需要对函数式编程有什么经验。还要了解一些TCP和Socket的基础知识,对Erlang多少有一点了解,这样效果会更好。我推荐看一下 Erlang 入门。<br />本教程按照一些基本的步骤,从无到有地创建 Bogochat。使用了迭代的方法,转载 2011-05-16 20:23:00 · 4201 阅读 · 2 评论 -
Erlang的Mnesia——为高伸缩性应用准备的数据库管理系统
<br /><br />看来我们很可以称2007为“数据库正规化的神秘面纱被揭穿的一年”。我们已经看到了一些有意思的讨论,一些大型网站为了能够处理每小时上千万的访问请求,而放弃了传统关系数据库的路子。根据Joe Gregorio最近的观察,出现了这样一些常见方案(这里强调的是我的观点):如果你想伸展到拍字节(Petabyte,2的50次方,约千万亿)的级别,或者每天数十亿请求,你就需要:分布式部署。数据必须分布到多台机器上去。无表连接(Joinless)。至少在数据存储层次上,不能使用表连接(Join)转载 2011-05-16 20:24:00 · 1057 阅读 · 0 评论 -
ibrowse 可用性测试(包括时间测试函数)
<br />转载:http://www.tianqidev.com/<br /> <br />之前发帖抱怨过erlang inet http client的性能很糟糕并且有严重bug<br />litaocheng同学曾建议使用ibrowse,正好目前有项目需要一个http client,<br />遂下载查看源码学习之(erlang周边项目基本可以放弃只看doc就可以使用的想法)<br />ibrowse启动首先会读取priv下的配置文件,默认为ibrowse.conf<br />格式:<br />{de转载 2011-05-18 09:39:00 · 1646 阅读 · 0 评论 -
Erlang系统原理
<br />转载:http://blog.csdn.net/krh2001/archive/2009/06/22/4287962.aspxErlang 系统原理<br /> <br />版本 5.7.1<br />翻译:krh2001<br /><br /><br /> <br />1 系统原理<br />1.1 启动系统<br />一个Erlang 运行时系统可通过命令erl 来启动:<br />% erl<br />Erlang (BEAM) emulator version 5.2.3.5 [hipe转载 2011-05-26 10:22:00 · 1896 阅读 · 0 评论 -
Erlang系统原理
<br />转载:http://blog.csdn.net/krh2001/archive/2009/06/22/4287962.aspxErlang 系统原理<br /> <br />版本 5.7.1<br />翻译:krh2001<br /><br /><br /> <br />1 系统原理<br />1.1 启动系统<br />一个Erlang 运行时系统可通过命令erl 来启动:<br />% erl<br />Erlang (BEAM) emulator version 5.2.3.5 [hipe转载 2011-05-26 10:23:00 · 2615 阅读 · 0 评论 -
开源点评:Protocol Buffers介绍
<br /><br />今天来介绍一下“Protocol Buffers”(以下简称protobuf)这个玩意儿。本来俺在构思“生产者/消费者模式 ”系列的下一个帖子:关于生产者和消费者之间的数据传输格式。由于里面扯到了protobuf,想想干脆单独开一个帖子算了。<br /><br /> ★protobuf是啥玩意儿? <br /> 为了照顾从没听说过的同学,照例先来扫盲一把。<br /> 首先,protobuf是一个开源项目(官方站点在“这里 ”),而且是后台很硬的开源项目。网上现有的大部分(至少转载 2011-05-26 14:40:00 · 904 阅读 · 0 评论 -
经典--浅析Erlang分布的核心技术
<br />转载:http://developer.51cto.com/art/200812/100298.htm<br /> 本文简单介绍了Erlang系统的核心技术和几个重要特性:分布、多核心支持、fp;并对erlang最强大的特性——分布特性做了重点介绍。<br /> <br />Erlang系统在我看来有3个特性: 1. 分布 2. 多核心支持 3. fp。 这3个特性中分布我认为是erlang最强大的,从第一个版本就支持到现在,相对非常成熟,而多核心支持是这几年才加进去的。 <br />e转载 2011-05-26 18:09:00 · 1683 阅读 · 0 评论 -
一种以standalone方式启动erlang应用的方法
<br />转载:http://cryolite.iteye.com/blog/383927<br /> <br />就像普通java应用一样启动一个erlang虚拟机,程序在虚拟机上运行,没有交互界面。 <br /><br />一个办法是启动时带 -detached参数,这样erlang虚拟机就进入了所谓的detached模式,在detached模式中,erlang静悄悄的在背后运行,没有常见的那个交互终端界面。 <br /><br />例子:以detached模式启动一个my_app应用Shell代码转载 2011-05-24 18:48:00 · 2008 阅读 · 0 评论 -
另一种实用的接入erlang控制台的方法
<br />转载:http://mryufeng.iteye.com/blog/362394<br /> <br />能对运行中的erl系统进行控制是非常重要的一个福利,但是假如你的erl系统是后台运行的, 根本就没有shell可以让你输入。 <br /><br />如果你的节点有name 那么可以用JCL 或者-remsh 接入. 否则的话 你就得用如下方法: <br /><br />请先参考 Embedded Systems User's Guide. 这种方式的好处是你的所有输入输出都记录在log文件转载 2011-05-24 18:49:00 · 1751 阅读 · 0 评论 -
Actor模型的本质:究竟是要解决什么问题
<br />Actor模型的本质已经被强调了无数遍:万物皆Actor。Actor之间只有发送消息这一种通信方式,例如,无论是管理员让工作者干活,还是工作者把成果交还给管理员,它们之间也要通过发送消息的方式来传递信息。这么做看似不如直接方法调用来的直接,但是由于大量的消息可以同时执行。同样,消息让Actor之间解耦,消息发出之后执行成功还是失败,需要耗费多少时间,只要没有消息传递回来,这一切都和发送方无关。Actor模型的消息传递形式简化了并行程序的开发,使开发人员无需在共享内存(确切地说,其实是共享“写”)转载 2011-05-26 14:53:00 · 1904 阅读 · 0 评论 -
Google ProtoBuf 支持N+1种语言
<br />Action Script: http://code.google.com/p/protobuf-actionscript3/Action Script: http://code.google.com/p/protobuf-actionscript/Action Script: http://code.google.com/p/protocol-buffers-actionscript/C: http://code.google.com/p/protobuf-c/C#: http://githu转载 2011-05-26 16:03:00 · 3149 阅读 · 0 评论 -
如何调试Erlang程序
<br /><br />调试是程序开发过程中的非常重要的过程,对于某些调试可能是开发过程中最难的一步,<br />熟练的掌握调试工具和方法,可以提升我们调试的效率。<br />Erlang的debugger是一个gui的调试工具。本文将介绍如何使用此工具。<br />1 编译<br />只有编译时加上debug_info的模块才能被调试<br />在erlang shell中加上debug_info标志如下<br />1>c(MODULE, debug_info).<br />使用erlc的例子如下:<br转载 2011-05-26 18:08:00 · 4604 阅读 · 0 评论 -
erlang 的源代码保护机制(经典)
<br /><br />稍微深入研究过一点 java 的同学,恐怕都知道什么叫做 “反编译” 。也就是说,随便拿一个 class 文件,找一个 jad 来,所有的 “智慧结晶” 就全都 “真相大白” 了,跟原先的 source code 相比,区别只是没有注释而已。<br />对于开源软件开发者来说,这本是无所谓的事,但对于商业开发者而言,这简直就是噩梦。在 java 的世界,道高一尺魔高一丈(及其反复迭代)的结果是,这件事最终演变得比较诡异,以至于专门诞生了一个名叫 “代码混淆” 的产业。在我上一次关注的转载 2011-05-26 18:13:00 · 6049 阅读 · 0 评论 -
erlang debug调试
1.debugger:start()或im()打开调试环境。2.把需要调试的模块加载到调试环境中,界面添加和代码添加两种方式。注意:eclipse环境下编译的beam默认是debug_info(猜测源码没看,类似c(module,[debug_info]编译,ii(module)添加)编译方式)转载:http://hi.baidu.com/springwu/blog/item/a1f4cf5149c2702842a75b9f.html转载 2011-05-28 23:11:00 · 1739 阅读 · 0 评论 -
Linux运行监控与调优介绍参数(翻译主要内容)(经典)
<br />转载:http://hi.baidu.com/springwu/blog/item/267ec345cd9d4628879473ce.html<br />1、CPU<br />2、内存<br />3、I/O<br />4、网络<br />1、CPU<br /> 应该理解CPU运行的主要参数:上下文切换,运行队列、CPU利用率与平均负载<br />(1)上下文切换:<br /> 1)CPU指令从一个进程(线程)到另一个进程,称为上下文切换。<br /> 2)当一个进程发生切换转载 2011-05-28 23:35:00 · 860 阅读 · 0 评论 -
关于Erlang和SMP的一些说明
<br />转载:http://shiningray.cn/some-facts-about-erlang-and-smp.html<br /> <br />原文:http://groups.google.com/group/erlang-questions/browse_thread/thread/7827f5e32681ca8e<br />by.Kenneth Erlang/OTP team, Ericsson<br />译:ShiningRay<br /> <br />以下是一些Erlang SMP实转载 2011-05-30 17:40:00 · 879 阅读 · 0 评论 -
用Mercurial(Hg)好处多
Tag:hgbitbucket版本控制mercurialgit<br /> 如果你还在用SVN这类集中式的版本控制软件,或者还在hg和git之间摇摆,或者还根本没有选定一个常用的版本控制软件,那么不妨试试Mercurial吧。现在实在没力气组织语言写文章.. 所以在这里我把相关资源个理由列举出来。<br />1.简单介绍,Mercurial是一个分布式的版本控制系统,主程序名字是hg所以简称就是hg。经常可以看到git和hg被提到,现在这两个是当下比较热门的版本控制系统。<br />2.相比于git,h转载 2011-05-31 15:42:00 · 1526 阅读 · 0 评论 -
Rebar:Erlang构建工具
Rebar是一款Erlang的构建工具,使用它可以方便的编译、测试erlang程序、内联驱动和打包Erlang发行版本。Rebar是一个独立的erlang脚本,所以使用Rebar发布程序非常简单,甚至可以直接集成在项目文件夹中。默认的情况下,Rebar会按照 Erlang/OTP来组织项目的结构,这样一来,构建时的配置工作量就会大大减少。Rebar同时提供了依赖库(包)管理机制,方便程序员重用转载 2011-06-03 19:23:00 · 1131 阅读 · 0 评论 -
reltool用户指南
reltool使用指南Author:litaochengMail:litaocheng@gmail.comRevision:1Date:2009.10.28目录1 概述 1.1 适用范围和目的 1.2 了解更多内容 2 使用 2.1 GUI 相转载 2011-06-03 19:29:00 · 986 阅读 · 0 评论 -
rebar rebar.config
在rebar使用 构建系统时,可以手动创建一个rebar.config的文件,通过这个文件可以对rebar进行配置。这个文件中有两个参数比较重要%% Where to put any downloaded depandencies. Default is `deps’在哪里存放从网络上下载的依赖applications?1{deps_di转载 2011-06-03 19:31:00 · 5341 阅读 · 0 评论 -
Linux 下 Redis 安装详解
<br />转载:http://www.oschina.net/question/12_18065<br /> <br />redis作为NoSQL数据库的一种应用,响应速度和命中率上还是比较高效的。项目中需要用集中式可横向扩展的缓存框架,做了一点调研,即便redis、memcached存在效率上的差异(具体比较参考http://timyang.net/data/mcdb-tt-redis/),但其实都能满足目前项目的需求;但是redis还是比较风骚的,支持链表和集合操作,支持正则表达式查找key,目前项目转载 2011-06-02 09:54:00 · 1881 阅读 · 0 评论 -
关于io_request
关于io_request相关module<br />涉及到kernel/io, kernel/user, kernel/application_master, stdlib/slave.Erlang中的标准io接口<br />stdlib/io module, 为erlang中的标准的io接口模块,其io操作基于process实现, 如对文件, 标准输入输出等操作,都可以使用此module进行处理(对于文件,file:open/2, 默认是使用io模块进行操作,除非指定raw选项).<br /> <br /转载 2011-05-31 21:58:00 · 1619 阅读 · 0 评论 -
Erlang节点short names 和long names
erl node启动方法<br />short name:erl -sname Name erl -sname Name@ShortHost<br />longname:erl -name Name erl -name Name@ShortHosterl -name Name@FullHost<br />说明:Name :: atom() || string()ShortHost :: atom() || string(), 不可含有"."。比如"myhost"FullHost :: [ShortH转载 2011-05-31 22:02:00 · 2438 阅读 · 0 评论 -
Erlang:关于Record
<br />《Mnesia用户手册》中有几句话:<br />表达式 record_info(fields,record_name)被 Erlang 宏预处理程序处理后返回记录的域名列表.定义记录-record(foo, {x,y,z}), 表达式 record_info(fields,foo)被扩展为列表[x,y,z].<br />所以,record_info/2这个是在编译时预处理的,不是运行时执行,所以如下代码会报错的,而且是在编译的时候就已经报错:<br />A=foo,<br />record_in转载 2011-06-01 16:00:00 · 2538 阅读 · 0 评论 -
Redis几个认识误区
<br />转载:http://www.erlangsir.com/2011/05/31/redis%e5%87%a0%e4%b8%aa%e8%ae%a4%e8%af%86%e8%af%af%e5%8c%ba/<br /> <br />前几天微博发生了一起大的系统故障, 很多技术的朋友都比较关心,其中的原因不会超出James Hamilton在On Designing and Deploying Internet-Scale Service(1)概括的那几个范围,James第一条经验“Design for转载 2011-06-02 09:58:00 · 823 阅读 · 0 评论 -
erlang链接进程之间的关系
<br />最近学习erlang,看了一些书籍和文档,对“链接进程”之间的退出机制,一直也不是很明白,今天动手做了一个实验。<br /><br />大致分为两种情况:<br />1.process_flag(trap_exit,false),也是默认行为:<br /> “A进程”和“B进程”相互链接,(1)如果“A进程”异常退出“B进程”也随之退出;(2)如果“A进程”正常退出,“B进程”不做任何处理,继续运行。<br /><br />2.process_flag(trap_exit,t原创 2011-06-02 15:47:00 · 1130 阅读 · 0 评论 -
Packet type http and httph in {inet,ssl}:setopts/2
转载:http://erlang.2086793.n4.nabble.com/Packet-type-http-and-httph-in-inet-ssl-setopts-2-td2121721.htmlHi All, In the documentation in the inet module the last line reads: "Note that the pa转载 2011-06-05 01:02:00 · 1632 阅读 · 0 评论 -
VM Player虚拟机中安装Ubuntu,Ubuntu下安装Erlang的步骤
vmware-player安装ubuntu与相关设置:1.用vmware-player安装ubuntu的注意:如果要安装中文版得ubuntu,需要先创建虚拟机,然后在挂接ubuntu的ISO文件,否则vmware-player在安装ubuntu的时候会自动安装成英文版本,本人吃了大亏弄了很长时间,才想到了解决的办法,哈哈。 2.将ubuntu的网卡设置为bridged模式,ubuntu设置原创 2011-06-06 12:06:00 · 4468 阅读 · 0 评论 -
x-forwarded-for的深度挖掘
如今利用nginx做负载均衡的实例已经很多了,针对不同的应用场合,还有很多需要注意的地方,本文要说的就是在通过CDN 后到达nginx做负载均衡时请求头中的X-Forwarded-For项到底发生了什么变化。下图为简单的web架构图: 先来看一下X-Forwarded-For的定义:X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求转载 2011-06-07 12:17:00 · 6753 阅读 · 0 评论