Linux下消息队列和socket绝对速度比拼[转]

Linux下消息队列和socket绝对速度比拼[转]

ID:37710986

大小:34.02 KB

页数:13页

时间:2019-05-29

Linux下消息队列和socket绝对速度比拼[转]_第1页
Linux下消息队列和socket绝对速度比拼[转]_第2页
Linux下消息队列和socket绝对速度比拼[转]_第3页
Linux下消息队列和socket绝对速度比拼[转]_第4页
Linux下消息队列和socket绝对速度比拼[转]_第5页
资源描述:

《Linux下消息队列和socket绝对速度比拼[转]》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、在当今的网络时代,我们常常见到的进程间通信方式都是socket,比如Java的EJB调用,Java和C通信,WebService服务等。socket是最常用的通讯技术,几乎所有的系统、语言都支持,socket也是面向网络的,通信的两方可以跨越IP网络进行传输。在本地通信中(同一台机器上的进程间通讯),socket的网络特性却成了累赘,组装解析网络报头、报文确认、CRC校验等都是针对网络的,本地通信没有必要,反而会影响传输效率。本地通信的一些传统技术,如管道、FIFO、消息队列等,没有网络功能的负担,传输速度应该高于socket,那

2、到底高多少以至于值得在应用中替换socket技术呢,今天就来一场小测试,就SystemV消息队列和socket之间,做一次全面的速度比拼。比拼场地本人的笔记本:赛扬1.5G内存1.5G系统:Ubuntu8.04Desktop(Linux2.6.24-24-generic)JDK:1.6第一回合:Java测试先说明一下,Java并不支持SystemV消息队列,因此特为Java提供了JNI接口,我们使用lajp_9.09提供C源码编译的so动态连接库,lajp的下载地址和文档:http://code.google.com/p/lajp

3、/首先上场的是SystemV消息队列。发送端程序:packagetest; importlajp.MsgQ; publicclassTestSend{  /**消息队列KEY*/  staticfinalintIPC_KEY=0×20021230;   static  {    //JNI    System.loadLibrary("lajpmsgq");  }   publicstaticvoidmain(String[]args)  {    //创建或获得现有的消息队列    intmsqid=MsgQ.msgget(IP

4、C_KEY);    //发送字节数组    byte[]msg=newbyte[1024];       for(inti=0;i<1024*5000;i++)    {      //每次发送1204字节到消息队列,9527是消息类型      MsgQ.msgsnd(msqid,9527,msg,msg.length);    }    System.out.println("发送结束.");  }}接收端程序:packagetest; importlajp.MsgQ; publicclassTestRcv{  /**消息队

5、列KEY*/  staticfinalintIPC_KEY=0×20021230;   static  {    //JNI    System.loadLibrary("lajpmsgq");  }   publicstaticvoidmain(String[]args)  {    //创建或获得现有的消息队列    intmsqid=MsgQ.msgget(IPC_KEY);    //接收缓冲区    byte[]msg=newbyte[1024];        longstart=System.currentTimeM

6、illis();//开始时间        for(inti=0;i<1024*5000;i++)    {      //每次从消息队列中接收消息类型为9527的消息,接收1204字节      MsgQ.msgrcv(msqid,msg,msg.length,9527);    }     longend=System.currentTimeMillis();//结束时间    System.out.println("用时:"+(end–start)+"毫秒");  }}程序很简单,需要说明的是三个JNI方法调用:msgget

7、()方法:SystemV消息队列的技术要求,含义是通过一个指定的KEY获得消息队列标识符。msgsnd()方法:发送。msgrcv()方法:接收。发送方进行了(1024*5000)次发送,每次发送1024字节数据,接收方进行了(1024*5000)次接收,每次接收1024字节,共计发送接收5G数据。测试时先启动TestSend程序,再启动TestRcv程序,共进行5轮次测试,测试结果如下:用时:29846毫秒用时:29591毫秒用时:29935毫秒用时:29730毫秒用时:29468毫秒平均速度:29714毫秒用top命令监控测试

8、期间的CPU、内存的使用:接下来上场的是socket。发送端程序:importjava.io.IOException;importjava.io.OutputStream;importjava.net.Socket;  publicclassSoc

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。