- 浏览: 111434 次
- 性别:
- 来自: 北京
最新评论
-
yxnyxnyxnyxnyxn:
正需要这个 太感谢了
Memcached源码分析(线程模型) -
laier903:
请问这句的作用是?如何理解呢?if(events & ...
简单封装一下epoll -
aquester:
从实践来看,惊群对性能基本没有影响。
测试Lighttpd accept的惊群现象 -
anranran:
Event event = handler.pollEvent ...
Leader Follower线程模型简单实现 -
anranran:
好文,代码不全,可否补全
Leader Follower线程模型简单实现
文章列表
关于erlang进程hibernate的好处,去过这次erlang大会的同学应该已经都知道了
简单的理解:
hibernate可以使你闲置的erlang进程马上进行gc,因为进程处于receive状态下是不会gc的
我在性能调优时发现,gc对于消息发送速度的影响还是非常大的
关于erlang gc问题也可以参看这个
引用
Recently, as part of RabbitMQ server development, we ran into an interesting issue regarding Erlang’s per-process garbage collection. If ...
关于erlang提供的gen_fsm有限状态机模型,可以说是很好很强大,正是有了它,才使erlang编写复杂业务逻辑成为一件轻松愉快的事情
但是由于erlang的速错设计原则,我们的状态机进程可能在某些异常下直接退出,这点可能跟我们的需要有点背离
最常见的情况是,状态转移中的错误处理问题,如下代码:
%% ====================================================================
%% Interface Function
%% ============================================== ...
今天花了大半天时间给前端flash同学解释TCP相关的原理和细节,并陪同一起写完了与erlang服务器的通信模块
flash socket一般2种,xmlSocket和 socket(binary),xmlsocket基本也是flash自己封装的啦
由于服务器是用的erlang,erlang已经提供了处理TCP协议,自动拆解包头的方法,也就是
{packet,N}这种用法了,那自然就用不着自己去做底层粘包,判断packet是否是一个完整应用层协议包的细节了
也就是说,服务器端和flash通信 格式是这样的:
------------------------
|N bytes header| ...
之前发帖抱怨过erlang inet http client的性能很糟糕并且有严重bug
litaocheng同学曾建议使用ibrowse,正好目前有项目需要一个http client,
遂下载查看源码学习之(erlang周边项目基本可以放弃只看doc就可以使用的想法)
ibrowse启动首先会读取priv下的配置文件,默认为ibrowse.conf
格式:
{dest, Hostname, Portnumber, MaxSessions, MaxPipelineSize, Options}.
程序是通过file:consult()这个读取的,所以应该知道什么格式了
其实程序中会保存这个配 ...
开始规模研究tsung的源代码,代码不多,看起来应该不会太费力,先参考这些资料
老大的2篇博客:
http://mryufeng.iteye.com/blog/355827
http://mryufeng.iteye.com/blog/355716
其中还提到一个writing tsung plugin
http://www.process-one.net/en/wiki/Writing_a_Tsung_plugin/
都看了一遍,然后基本明白怎么用后,就该研究如何编写plugin了
tsung 基本就分3部分,controller,client和recorder,如果不是自己录制http压 ...
erlang 调用 gen_tcp:accept时是会阻塞的,包括后续的gen_tcp:recv也是,但是这个阻塞实际是在erlang这边 receive等待driver返回消息,并不是阻塞在driver上,driver是不能阻塞的,这个mryufeng老大也很早就跟我说过,当时没明白,现在终于理解了
看下erlang 这边是如何做的
accept0(L, Time) when is_port(L), is_integer(Time) ->
case async_accept(L, Time) of
{ok, Ref} ->
receive
{ ...
erlang 与外部通信有2种方式:
A. 外部port,外部程序通过stdin,stdout与erlang交互
B. linkin driver 是erlang 直接调用的方式
从效率上看,当然是B的效率最好,一直觉得这个东西是非常有用的,以前也有些idea,请教过yufeng老大,结果被教育 ...
准备用erlang做网游的服务器端,遇到一个通信层设计的问题
erlang socket大多都是使用的被动模式,防止message flood问题
系统中会存在两种消息,一种是客户端和服务器的交互信息,就是简单的request-response模式,另外一种是系统游戏过程中产生的广播消息
如果采用erlang被动socket模式, recv()方法本身是阻塞等待客户端请求的,同时系统广播消息可能会随时产生,那么阻塞的进程就无法及时取到当前mailbox里的消息,发给客户端了
目前打算采用客户端同时开2条TCP连接的方式解决。一条用于处理交互信息,另一条只处理当前系统的广播消息
代价就是 ...
调用gen_server启动的方法
gen_server :start_link ( { local, ?MODULE } , ?MODULE , [ ] , [ ] ) .
参数分别是Name,Mod,Arg,Options
Options里可以设置timeout
gen.erl里的简单小函数取得timeout
timeout(Options) ->
case opt(timeout, Options) of
{ok, Time} ->
T ...
试了下inets的http client,调用http:request方法,在单个进程内少量调用,或多个进程内少量调用都没有问题,但是只要调用次数达到几千以上,就会报错
错误信息基本就是bad_return_value,invalid version等等
不知道有没有人试过 大名鼎鼎的Richard Jones在 A Million-user Comet Application with Mochiweb里面的那个floodtest的例子,一样会报这个错误
receive
{http,{_Ref,stream_start,_X}} -> recv({Active+ ...
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_call从应用态转到内核态等系列复杂过程带来的性能的损耗
2.tcp_sendspace
TCP send buffer size can limit how much data the applicatio ...
- 2009-06-23 23:13
- 浏览 2466
- 评论(0)
启动创建好的skeleton时,skel.erl调用application:start(),根据skel.app,启动skel_sup.erl 的supervisor,规格
%% @spec init([]) -> SupervisorTree
%% @doc supervisor callback.
init([]) ->
Ip = case os:getenv("MOCHIWEB_IP") of false -> "0.0.0.0"; Any -> Any end,
WebConfig = [
...
不知为什么,我看书的效率总是比较低,吸收的不多,反而看代码会觉得比较有意思,也能更集中精力,programming erlang看了也2遍了,基本除了语法熟悉了外,对具体应用还是一点都没明白,直到发现了mochiweb,这东西代码好少呀, ...
简单实现了下memcached binary protocol的 get和 set command,体验了下erlang binary语法的强大和方便
代码:
-module(binary_server).
-export([start/0]).
start() ->
{ok,Listen}=gen_tcp:listen(7777,[binary,{packet,0},{reuseaddr,true},{active,true}]),
register(kvs,spawn(fun() -> dict() end)),
accept(Listen).
a ...