`
litaocheng
  • 浏览: 333171 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
好久不发文章,因为工作太忙。这个东西就凑凑数吧。各位见谅。 下一篇可能会介绍port,因为工作中用的比较多.     CNode用户指南 Author: litaocheng Mail: litaocheng@gmail.com Date: 2009.7.8 目录 1   概述 2   CNode 相关API 2.1   建立连接 2.2   发送接收消息 2.3   Erlang client 3   编译运行 4   完整代码 1   概述 利用Erl ...
Erlang类型及函数声明规格 Author: litaocheng Mail: litaocheng@gmail.com Date: 2009.6.8 Copyright: This document has been placed in the public domain. Contents 概述 意义 规范 类型及其定义语法 自定义类型定义 在record中 ...
Erlang提供了丰富的开发工具,你认为没有的时候,很可能是你不知道它存在.   在OS中,我们经常查看操作系统的进程信息,帮助我们进行诊断。   Erlang提供了一个小工具 etop (Erlang top), 用来查看Erlang运行环境中,内存,ets,binary,进程等相关信息。   这些被收集的信息大部分是通过erlang module的相关bif输出,etop只是做了一个好的展现。   etop位于: erlang/lib/observer-xxx/priv/bin 目录下, etop为CLI,getop为GUI表现,在windows下也可以通过调用etop.ba ...
并发和顺序是一个令人纠结的问题。 下面是开发中遇到的一个问题 常规时间,系统表现的很“端庄”,不折腾CPU,不玩弄Mem。可是到高峰时,这个家伙就开始变态了。内存狂飙,直至swap最后无法响应。这个状况,当时折腾了 ...
就喜欢看这样的东西... This is so juicy I couldn’t resist blogging about it. 37Signals sysadmin and my good friend Mark Imbriaco replaced the Campfire chat room handler, originally written in C, with an Erlang version. The results? 283. As in 283 lines of Erlang code in toto. 1500. The Erlang poller handles ...
在项目中需要对list进行随机shuffle,但是在erlang的stdlib中没有这个函数。 因此需要自己实现一把。 参考google两种实现: 版本1(速度快,随机化不好): shuffle_v1(L) ->                List1 = [{random:uniform(), X} || X <- L],         List2 = lists:keysort(1, List1),         [E || {_, E} <- List2]. 很简单为每个元素添加一个random的次序,随后通过sort进行排序,最后获取最终结果。 版本2( ...
以下是在erlang项目开发中的一些记录,即包含很多通俗易懂的原则,也包含一些似是而非的建议,比较混乱,还没有积累到一个可以分门别类的地步,各位就将就看吧.. :) * 确保没有任何编译警告 * Erlang中String采用list实现,32位系统中,其1个字符用8个字节的空间(4个保存value, 4个保存指针)。因此string速度较慢,空间占用较大 * 在Server中,总是尽力书写尾递归(tail-recursive)的函数 * 使用'++'时,left list会被拷贝,然后添加到right list的头部,因此最好把length较短的list放在左侧 * 避免使用rege ...
经过一段时间的折腾,昨天Ad系统终于要上线经受考验了。 核心系统基于Erlang + Mnesia,采用Erlang的分布式机制。 系统部署在2台server(4核,4G内存,比较老),启动4个node,轻松处理2k/s的并发请求,响应时间在500ms左右,erlang node占用内存在200M左右,至此系统还没有进行细致的优化 以此来看Erlang还是很强劲的! 当然期间也遇到了很多问题,需要在今后的开发中克服: 1,编码规范,很多开发人员没有适应FP开发,写出了很多蹩脚的长的函数 2,单元测试缺乏,每个module没有详细的测试 3,集成测试缺乏,没有采用test server,c ...
看这篇文章不错,有些实用性,特转来大家共享. 文章内容教长,咱们长话短说,首先说场景与结果 场景: 作者在本机进行多个Erlang Node之间的消息通信时,效率很高, 可是当两个Node位于不同的机器进行消息发送时,效率相差很大. 因此作者尝试进行优化,其在每个Node上加入一个Broker(中间人),进行消息缓冲.消息发送时,不是直接通过 ! 发送,而是交给这个Breoker, 由其进行消息的缓存, 当消息到达一定数目,或者规定的超时到达时, 将所有的消息发送给目标Node, 由目标Node发给对应的本机pocess. 这个做法其实是优化网络传输, 大块数据一次传输vs小数据多次传输, 最 ...
在R13A中, Erlang加入了对Unicode的支持。本文涉及到的数据类型包括:list, binary, 涉及到的模块包括stdlib/unicode, stdlib/io, kernel/file。 Binary Binary的type属性增加了utf相关的type:utf8, utf16, utf32,其分别对应UTF8, UTF16,UTF32编码。 Binary Constructing 在Binary构建时, 如果指定了utf相关类型,那么对应的integer的Value必须位于:0..16#D7FF, 16#E000..16#FFFD, 或者 16#10000..16#1 ...
最近比较忙, 一来是在努力学习Erlang, 二来是恋恋不舍那几个开源的小项目,三来是熟悉亲爱的R13A... 加上令人头疼的公司的事情, 导致我很忙... 哎... 为了保持博客的新鲜度, 就贴一点充数的资料吧..呵呵... 在我前段时间搞的一个开源的mapreduce小框架中, 对于map, reduce数据流的读取, 我抽象出一个迭代器, 进行数据的读取. 这样我的数据无论来自local Disk, 来自memory, 来时NFS都一视同仁... 在写一个module之前,我先想象其接口及用法: %%% usage: %%% Iter = make_iter(prev_fun, ...
tiny-3.0 最后,让我们弥补前面tiny-2.0的缺憾, 我们要开发tiny-3.0. tiny-3.0中我们不会在重启application, 我们这次 让Application温和的不间断的完成升级.   这里我假设你已经看懂前面的部分,并且亲自动手做了很多尝试. 下面是快速,直白的代码罗列.. 代码修改 新建tiny-3.0目录,添加一个module: mydict.erl 采用我们自定义的dict代替stdlib dict, 修改tiny_server, 使其加入一个last mofiy信息(最后修改时间), 添加一个supervisor child, 其定期的显示当前应用 ...
Release Handling Erlang的Release Handling, 充分利用Erlang的code hot swap特性, 让你的应用可以比较顺畅的进行升级,回退. tiny-2.0 tiny-1.0已经成功的部署到了 /opt/local/tiny-1.0/ 目录. 最近,我们对tiny进行了改进, 准备要发布tiny-2.0. 我们在回想一下tiny-1.0, 在开始的时候提及过其不是一个真正的OTP application, 其没有supervisor, 没有gen_server等 OTP behavior. 在tiny-2.0中我们准备弥补这个"过错& ...
Author: litaocheng@gmail.com Data: 2009-3-1 Version: 0.2 tiny OTP Application 为了简单,我们创建一个超级简单的application, 其只有一个module, 其不使用supervisor, 只创建一个简单的process, 我们为这个应用名叫:tinyapp (tinyapp-1.0). 其代码如下(tiny.erl):   -module(tiny). -behaviour(application). -export([start/2, stop/1]). start(_Type, ...
关于io_request 相关module 涉及到kernel/io, kernel/user, kernel/application_master, stdlib/slave. Erlang中的标准io接口 stdlib/io module, 为erlang中的标准的io接口模块,其io操作基于process实现, 如对文件, 标准输入输出等操作,都可以使用 此module进行处理(对于文件,file:open/2, 默认是使用io模块进行操作,除非指定raw选项).   使用io module具有一些好处:我们可以使用统一的接口对实现io操作; 其他的process也可以 访问被 ...
Global site tag (gtag.js) - Google Analytics