erlang,大家看看,10w并发,我这样测试方法不正确么?

荆棘谷-部落-我要么 发布于 2014/04/21 16:42
阅读 1K+
收藏 1

这是服务端的代码,接收请求,处理数据:
----------------------------------------------------------------------------------------------------------

-module(t_server).
-export([start/0, start/1, wait_connect/1, response/1]).

-define(PORT, 8091).

start() -> start(?PORT).
start(Port) ->
    {ok, Lsocket} = gen_tcp:listen(Port, [binary, {active, false}, {reuseaddr, true}]),
    wait_connect(Lsocket).

wait_connect(Lsocket) ->
    {ok, Socket} = gen_tcp:accept(Lsocket),
    spawn(?MODULE, wait_connect, [Lsocket]),
    get_request(Socket, []).

get_request(Socket, BinaryList) ->
    case gen_tcp:recv(Socket, 0) of
        {ok, Binary} ->
            get_request(Socket, [Binary | BinaryList]);
        {error, closed} ->
            response(lists:reverse(BinaryList))
    end.

response(_Data) ->
    ok.




这是客户端的代码,就是发送一个链接,然后,发送过去一个数字而已:
----------------------------------------------------------------------------------------------------------

-module(t_server).
-export([start/0, start/1, wait_connect/1, response/1]).

-define(PORT, 8091).

start() -> start(?PORT).
start(Port) -> 
    {ok, Lsocket} = gen_tcp:listen(Port, [binary, {active, false}, {reuseaddr, true}]),
    wait_connect(Lsocket).

wait_connect(Lsocket) ->
    {ok, Socket} = gen_tcp:accept(Lsocket),
    spawn(?MODULE, wait_connect, [Lsocket]),
    get_request(Socket, []).

get_request(Socket, BinaryList) ->
    case gen_tcp:recv(Socket, 0) of
        {ok, Binary} ->
            get_request(Socket, [Binary | BinaryList]);
        {error, closed} ->
            response(lists:reverse(BinaryList))
    end.

response(_Data) ->
    ok.



这些配置:
ulimit -n 51200
ip_local_port_range 1024 61000
也设置过了,

现在 10万并发, 要7秒左右。

我机器配置是: 4核, I5-5320, 6G 内存, erlang 版本是 1603B
我测度过,除掉 socket连接,单单生成进程,100万,约1秒时间,但涉及 socket 慢了 10倍。。。

有加参数优化  -K true -S 4 -P 204800
问题出在了哪里了?

加载中
0
book
book

我是erlang初学者,所以不一定对,在你代码中我没看到创建进程的代码啊,是不是单进程了

0
荆棘谷-部落-我要么
荆棘谷-部落-我要么

spawn() 就是创建新的进程啊。

0
无锡首席大都督程序员
膜拜erlang,学不会,哎
0
乌龟壳
乌龟壳

erlang这种语言已经比较智能了,这些都是正常的现象。

0
mingshun
mingshun

建立socket本来就是耗时的操作,比较建立process慢很多不奇怪

0
莊博堯
莊博堯

process, socket 我想學

0
eechen
eechen

I5-5320 你确定是这款CPU吗?

荆棘谷-部落-我要么
荆棘谷-部落-我要么
呵呵,反正是i5的了。。。。忘记什么型号了。。
0
马太航
马太航

不对,你是连接即释放,并行操作,有排队。


gen_server官方上有例子自己查查

0
荆棘谷-部落-我要么
荆棘谷-部落-我要么

不是gen_server,哦,好,我查下 gen_server 的例子。。。

返回顶部
顶部