自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

hibernate your gen_fsm process

关于erlang进程hibernate的好处,去过这次erlang大会的同学应该已经都知道了简单的理解:hibernate可以使你闲置的erlang进程马上进行gc,因为进程处于receive状态下是不会gc的我在性能调优时发现,gc对于消息发送速度的影响还是非常大的关于erlang gc问题也可以参看这个[quote]Recently, as part of Ra...

2009-12-14 11:37:26 134

修改gen_fsm源码构建更强壮的有限状态机

关于erlang提供的gen_fsm有限状态机模型,可以说是很好很强大,正是有了它,才使erlang编写复杂业务逻辑成为一件轻松愉快的事情但是由于erlang的速错设计原则,我们的状态机进程可能在某些异常下直接退出,这点可能跟我们的需要有点背离最常见的情况是,状态转移中的错误处理问题,如下代码:[code="java"]%% ======================...

2009-12-09 14:34:40 166

解释下erlang与flash通信细节

今天花了大半天时间给前端flash同学解释TCP相关的原理和细节,并陪同一起写完了与erlang服务器的通信模块flash socket一般2种,xmlSocket和 socket(binary),xmlsocket基本也是flash自己封装的啦由于服务器是用的erlang,erlang已经提供了处理TCP协议,自动拆解包头的方法,也就是{packet,N}这种用法了,那自然就...

2009-11-26 17:06:48 167

ibrowse可用性测试

之前发帖抱怨过erlang inet http client的性能很糟糕并且有严重buglitaocheng同学曾建议使用ibrowse,正好目前有项目需要一个http client,遂下载查看源码学习之(erlang周边项目基本可以放弃只看doc就可以使用的想法)ibrowse启动首先会读取priv下的配置文件,默认为ibrowse.conf格式:{dest, Hostn...

2009-11-18 18:21:32 203

tsung源码学习之xmerl

开始规模研究tsung的源代码,代码不多,看起来应该不会太费力,先参考这些资料老大的2篇博客:http://mryufeng.iteye.com/blog/355827http://mryufeng.iteye.com/blog/355716其中还提到一个writing tsung pluginhttp://www.process-one.net/en/wiki/Writi...

2009-10-25 14:10:23 182

gen_tcp async accept大致流程

erlang 调用 gen_tcp:accept时是会阻塞的,包括后续的gen_tcp:recv也是,但是这个阻塞实际是在erlang这边 receive等待driver返回消息,并不是阻塞在driver上,driver是不能阻塞的,这个mryufeng老大也很早就跟我说过,当时没明白,现在终于理解了看下erlang 这边是如何做的[code="java"]accept0(L, T...

2009-10-07 14:33:22 269

看gen_tcp driver源码学写erlang driver

erlang 与外部通信有2种方式:A. 外部port,外部程序通过stdin,stdout与erlang交互B. linkin driver 是erlang 直接调用的方式从效率上看,当然是B的效率最好,一直觉得这个东西是非常有用的,以前也有些idea,请教过yufeng老大,结果被教育了,所以一直不敢乱用,打算从gen_tcp开始学习driver的编写从源码上看,g...

2009-10-06 16:09:00 134

erlang 网游服务器端socket设计问题

准备用erlang做网游的服务器端,遇到一个通信层设计的问题erlang socket大多都是使用的被动模式,防止message flood问题系统中会存在两种消息,一种是客户端和服务器的交互信息,就是简单的request-response模式,另外一种是系统游戏过程中产生的广播消息如果采用erlang被动socket模式, recv()方法本身是阻塞等待客户端请求的,同时...

2009-09-24 12:03:40 137

gen_server源码杂记

调用gen_server启动的方法gen_server :start_link ( { local, ?MODULE } , ?MODULE , [ ] , [ ] ) .参数分别是Name,Mod,Arg,OptionsOptions里可以设置timeoutgen.erl里的简单小函数取得timeout[code="java"]timeout(Option...

2009-09-17 16:12:53 150

inets 的http client在大量请求调用时有错误

试了下inets的http client,调用http:request方法,在单个进程内少量调用,或多个进程内少量调用都没有问题,但是只要调用次数达到几千以上,就会报错错误信息基本就是bad_return_value,invalid version等等不知道有没有人试过 大名鼎鼎的Richard Jones在 A Million-user Comet Application wit...

2009-07-21 11:33:31 317

原创 TCP Socket Performance issue

1.In general, it is more efficient for the application to write large messages and have them fragmented and reassembled by IP, than to have the application write multiple times.原因就在于系统调用system_cal...

2009-06-23 23:13:29 132

mochiweb 学习笔记2

启动创建好的skeleton时,skel.erl调用application:start(),根据skel.app,启动skel_sup.erl 的supervisor,规格[code="java"]%% @spec init([]) -> SupervisorTree%% @doc supervisor callback.init([]) -> Ip = case os:...

2009-06-11 17:44:59 128

mochiweb 学习笔记1

不知为什么,我看书的效率总是比较低,吸收的不多,反而看代码会觉得比较有意思,也能更集中精力,programming erlang看了也2遍了,基本除了语法熟悉了外,对具体应用还是一点都没明白,直到发现了mochiweb,这东西代码好少呀,研究研究,记录下来代码布局 标准的erlang otp目录结构mochiweb本身应该算一个web 服务器的核,然后可以围绕它定制自己的web s...

2009-06-10 19:36:14 118

erlang轻松实现memcached binary协议

简单实现了下memcached binary protocol的 get和 set command,体验了下erlang binary语法的强大和方便代码:[code="java"]-module(binary_server).-export([start/0]).start() -> {ok,Listen}=gen_tcp:listen(7777,[binary,...

2009-06-04 13:05:29 133

...

.....

2009-05-22 10:46:58 84

双数组Trie树实现笔记

双数组的算法可以参照 、An Efficient Implementation of Trie Structures地址:[url]http://www.cs.ubc.ca/local/reading/proceedings/spe91-95/spe/vol22/issue9/spe777ja.pdf[/url]该算法实际描述的是一个reduced trie上面讲的已经很详细了,只...

2009-05-20 15:58:54 180

生搬硬套设计模式坑害了多少人

看了这个帖子,有感写点废话http://www.iteye.com/topic/243309现在随便哪个面试不考点设计模式什么的,似乎就不叫面试,我倒想问问,面试官们你们自己不算那些死记硬背的,能记住多少模式的思想,又有多少是你们每天写的程序会用到的我承认1. 设计模式确实是前人总结的一些经验和良好的设计范式,是很有价值的2. 把握良好的设计模式能够理清程序的骨架,使程...

2009-05-08 22:58:50 271

测试Lighttpd accept的惊群现象

lighttpd里面采用的是prefork的模型,在fork进程之前就已经创建好了listen socket那么fork了进程池之后,所有进程都有一份自己独立的listen socket fd,但实际上这个独立的fd 对应的确是一个文件表项,即实际上任然是一个共享的文件描述符在阻塞模型中,各进程分别通过accept阻塞,等待连接到达,当一个连接到达时,所有的进程都会被唤醒,但只...

2009-05-08 14:54:04 162

简单封装一下epoll

按照lighttpd的方式封装了一下epoll,打算以后就直接这么用了,虽然简陋了点,不过很容易修改event.h头文件[code="c"]#include #define BV(x) (1 fdarray = calloc(maxfds , sizeof(*ev->fdarray)); ev->maxfds = maxfds; ev->epoll_fd=epol...

2009-05-06 17:15:24 166

lighttpd学习笔记二

记录一下lighttpd的事件处理机制,这个基本上就是和libevent差不多lighttpd事件处理的全局数据结构主要有[code="c"]typedef struct fdevents { fdevent_handler_t type; //事件处理类型,lighttpd通过配置文件获取 fdnode **fdarray; //回调事件,参数等保...

2009-05-06 10:27:21 194

lighttpd 学习笔记一

从server.c的main函数看起,启动流程大体如下:server_init 函数初始化lighttpd 的server 数据结构,涉及到其中一些buffer,array的结构初始化工作,主要参考的数据结构buffer,array,chunkqueue等等通过启动参数-f 读取配置文件 config_read[code="c"]if (!i_am_root && (g...

2009-05-04 16:24:49 523

programming erlang - Distributed 那章的实验

试了下programming erlang distributed 那章的例子,记录一下一. erl -name实验一:我把kvs那个程序放在了A,B两台服务器上,这两台服务器的hostname()都没设置在B服务器上执行了 erl -name bachmozart@erlang.xxxx.com -setcookie abc然后 kvs:start()....

2009-03-25 11:56:57 186

我也研究下云风的垃圾回收库

在网上闲逛时发现了一个云风写的垃圾回收库和源码学习文档,我也一起研究一下,一方面弥补一下我对gc知识理解的不足,另一方面督促自己把这个不足1000行代码确足够诡异的迷你gc库看完,搞清楚原理。参考:源码地址:http://manualgc.googlecode.com/svn/trunk/另外一位同学写的分析文章:http://www.cppblog.com/darkdestiny...

2009-03-21 16:19:49 100

Memcached源码分析(线程模型)

目前网上关于memcached的分析主要是内存管理部分,下面对memcached的线程模型做下简单分析有不对的地方还请大家指正,对memcahced和libevent不熟悉的请先google之先看下memcahced启动时线程处理的流程[img]http://bachmozart.iteye.com/upload/attachment/81342/167202a5-1214-33c...

2009-03-05 19:58:33 133

原创 Linux 时间函数使用备忘

学了忘,忘了还得学,简单记录下1. time_t time(time_t *tloc);time函数返回从1970年1月1日0点以来的秒数.存储在time_t结构之中把 这个printf("%ld",time(0)) 保存编译加到watch -n 1 后面,看看效果2.int gettimeofday(struct timeval *tv, struct timez...

2009-03-02 19:55:16 103

链式hashmap实现笔记

Memcached里的Hashmap实现是一个简单的链式存储方式,简单记录一下链式hashmap的结构比较简单,基本上可以理解为一个一维线性空间,每个空间称作一个bucket,每个bucket又是一个链表结构,这个链表结构上的所有元素的key的hash值是相同的,所以被分配在一个bucket里。hashmap存储时首先根据key计算hash得到对应bucket,然后加入该bucket中...

2009-02-23 22:10:39 646

.....

......

2009-01-15 21:13:26 57

Linux queue.h之TAILQ队列分析

这两天想看看memcached的实现,所以先学习了libevent,使用起来还是比较简单的,其实是对select/poll/kqueue等的封装,学习libevent过程中又遇到了linux下队列的使用,简单分析如下,权当做记录:libevent中的例子中使用的是FreeBSD下的queue.h,在linux的/usr/include/sys/queue.h也有该头文件,但是是一个缩减版本...

2008-12-12 18:20:06 318

......

......

2008-12-10 21:43:50 60

Linux UDP EchoServer守护进程编写

平时工作中主要用java,不过还是对Linux非常喜爱,虽然学习时间有限,每天还是能学点小东西,呵呵,写了一个HelloWorld版的Linux守护进程,启动后监听UDP端口做简单的echo backServer代码[code="c"]#include#include#include#include#include#include#include#i...

2008-11-13 14:57:13 293

cindy源码分析filterchain

常用的网络通讯框架主要有:Mina ,Grizzly,Cindy,Netty 等,看了下cindy的代码,和mina有很多相似的地方,实现的比mina精简很多,据说性能还要好于mina.参照代码实现了一下filterchain的HelloWorld版,简单说明一下cindy里对filterchain模式的应用.首先定义filter接口,filter接口封装了session中的session...

2008-11-06 16:11:15 155

Leader Follower线程模型简单实现

在我们编写网络服务程序时,比较简单的方式是per client per thread模型,这种模型当客户端连接数快速增长是就会出现性能瓶颈,我们不能不断的开启新的线程,当然我们肯定是会使用线程池,但是线程的管理和频繁的线程调度也会影响性能.java 1.4给我们带来了NIO编程模型,由于它的读写操作都是无阻塞的,这样使我们能够只用一个线程处理所有的IO事件,当然我们不会真的只用一个线程来处...

2008-10-23 20:39:51 124

Memcached 集群,客户端自动Hash到不同服务器的实现

.....首先分析一下Java client 启动时的部分代码Memcached 支持直接设置多个servers属性 来实现多个memcahced均衡,对应还有一个属性是weights,字面意思就是权重,分析了一下代码,和我想的是一样的启动memcached的代码通常是这样的[code="java"]SockIOPool pool = SockIOPool.getIns...

2008-07-05 11:56:19 98

jprofiler 整合resin3

今天准备用jprofiler监测系统性能,看了半天文档,其实基本按照向导来,还是比较容易将关键的地方记录一下服务器和本地各装好jprofilerLinux服务器要设置export LD_LIBRARY_PATH=/opt/tools/jprofiler4/bin/linux-x86 然后配置本地windows向导,最后将生成的东东,按下面的形式使用就好了[s...

2008-07-03 15:52:13 97

原创 Apache2+resin3整合以及规范日志处理

今天整合了一下apache2+resin3,以前一直在用,今天自己整合了一下,其实还是很简单的[size=large][b]一.安装环境[/b][/size]1.下载resin 注意:一般不需要下载resin-pro,因为那个不是免费的wget http://caucho.com/download/resin-3.0.25.tar.gz2.下载apachewge...

2008-07-02 16:14:57 106

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除