您的位置:首页 > 理论基础 > 计算机网络

erlang节点间通信使用erlang send 和使用gen_tcp socket性能的对比(

2013-06-21 11:51 423 查看
在erlang开发中使用erlang send是比较方便的,但是性能相比使用socket会有多大的损失呢。
 
测试程序:
    客户端:
        1.使用erlang send  发送1M次数据,每次一个整数
        2.使用gen_tcp连接,发送1M次数据,每次一个整数
    服务器端:
        基于ranch socket框架,开发简单的socket server (https://github.com/extend/ranch)
 
测试结果:
   erlang send 大概在15k op/t
   socket大概在40k op/t
 
从测试结果看,性能还是有比较大的差异,真是没有免费的午餐,erlang socket直接是使用port dirver,而erlang send在port driver前加了一层,使用ltrace跟踪发送10000数据的结果:
 
使用socket:
% time     seconds  usecs/call     calls      function

------ ----------- ----------- --------- --------------------

 27.13   10.751451      228754        47 poll

 27.08   10.732349     2683087         4 syscall

 12.53    4.963527        1328      3735 pthread_mutex_unlock

 12.25    4.853343         435     11146 pthread_getspecific

  6.66    2.640606      660151         4 read

  6.30    2.496726        1277      1955 memcpy

  5.06    2.005021      100251        20 strlen

  2.37    0.939892         258      3639 pthread_mutex_lock

使用:
erlang send:
% time     seconds  usecs/call     calls      function

------ ----------- ----------- --------- --------------------

 19.17   10.809368     5404684         2 syscall

 19.15   10.797144      568270        19 poll

 18.84   10.620922        1034     10262 pthread_mutex_lock

 13.93    7.851441        1082      7250 pthread_getspecific

  8.96    5.049468         422     11948 pthread_mutex_unlock

  8.89    5.010258     5010258         1 read

  5.88    3.316019         642      5162 memcpy

  4.31    2.431020        1441      1686 pthread_mutex_trylock

从数据看,erlang send比直接使用socket在锁的开销方面大了很多。
 
结论:
  erlang节点通信,erlang rpc在一般情况下性能是足够的,如果要更强的性能,可以考虑使用
socket,多点开发量,能带来不少的性能提升。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: