单机内进程间三种通信方法效率的比较 孙叶萌

  • 格式:pdf
  • 大小:125.70 KB
  • 文档页数:3

第26卷第3期 2 0 0 3年9月 长春理工大学学报 

Journal of Changchun University of Science and Technology VOI.26 NO.3 

Sop.2 0 0 3 

文章编号:1OO4—485X(2003)03--0081--03 

单机内进程间三种通信方法效率的比较 孙叶萌 (吉林大学计算机科学与技术学院.吉林长春130012) 摘要:对单机内两进程间通信的三种方法,即管道,共享内存和套接字,进行测试比较,找出 传输字节的量与传输方法的效率之间的关系,设计一个字节分段方案,使得可以根据传输字节的 量选择最快的传输方法。 关键词:管道;共享内存;套接字;通信效率 中图分类号:TP3文献标识码:A 

进程之间进行通信一个很重要的量度就是时 间,要使传输数据所用的时间尽量缩短,而又要使 传输的数据尽量的多而且准确,还有待于我们进行 更多的研究。可以考虑采用何种方法来提高两进程 之间通信效率,这样也可以提高计算机之间通信效 率。 两进程通信基本上有三种方法:管道,共享内 存,套接字。分别统计在单机内两进程间使用这三 种方法传输不同大小包的时间开销,将统计所得到 的结果进行比较,看传输一定大小包时,哪种方法 快,较为粗略的设计一种字节分段方案,使得在两 进程间传输固定大小包时采用固定方法以提高两进 程间通信的效率。 

1 测试方法 下面以套接字方法为例,简要阐述实现的方 法。采用两个程序分别创建两个进程,使用IN— TERNET域的SOCK—STREAME方法,一个程 序作服务器(server),等待其它进程的连接,并 可以接收包,另一个程序作为客户(client),可以 通过命令行参数获得服务器的地址信息,然后与之 连接,连接成功之后开始向服务器传送一定字节之 前,通过gettimeofday()函数取得当前系统时 间,服务器接收完这些字节,向客户发送一个应答 信号,客户接收到应答信号之后,再取系统时间, 两次时间做差即可得到传输所用时间,单位精确到 微秒。(见图1) 

COnnect timel /1 Rev / Send 

finish Rev tim2 

圈1 这只测试了在单机内的情况,该服务器和客 户程序稍加修改就可以扩展到多机,在一台主机的 命令行上启动服务器程序,然后在另外一台主机上 使用Telnet连接到这台自己写的服务器上(¥ telnet remotehostname 4000,remotehostname就 是运行服务器程序那台机器名),配置地址时,只 要使用gethostbyname()函数就可以获得服务器 的lP地址。使得数据可以真正的在网络上使用 TCP协议传输。 仍然以套接字方法为例说明编写程序的过程。 基本方法:考虑编制两个程序(运行时分别创 建了两个进程),一个作为服务器程序,一个作为 客户程序,使得客户程序要求与服务器程序建立连 接,服务器程序接受并与之连接,之后客户程序开 始向服务器程序传输一定量的数据并开始计时,服 务器程序接收完毕,向客户程序发送一个应答信 号,客户程序接收到应答信号以后,停止计时,并 计算出这次传输所用的时间,然后将时间显示出 来。这就是测试单机内两进程传输一定字节所用时 间的基本方法。 

收稿日期t 2003一O5—1O 作者简介t孙叶萌.女(198O一),硕士研究生,主要从事计算机科学技术的研究工作。 

http://www.lw23.com 论文网 论文大全http://www.lw23.com 论文网 论文大全82 长春理工大学学报 2003焦 编写服务器程序:主要明确该程序的功能:1) 创建一个套接字(socket)。2)配置自己的地址结 构。3)将地址绑定到套接字。4)监听是否有请求 连接的进程。5)接受连接请求。6)创建一个子进 程,接收客户程序传输过来的数据,将其放人指定 的缓冲区中。7)显示实际接收到的字节数。8)等 待所有的子进程结束,退出。相对客户程序来讲, 服务器程序完成的功能比较简单,它只需要接受连 接和接收数据,接收完后发一个应答信号给客户程 序,而计时的工作就交给客户程序来完成。 编写客户程序:还是要明确该程序的功能:1) 创建一个套接字。2)获得服务器的地址信息。3) 请求与服务器的连接。4)发送数据。5)接收应答 信号。6)计时并显示。7)控制发送5O次这样长 度的数据,并针对每一次的计时取5O次的平均值。 2 统计结果 编写好程序,进入真正的时间统计阶段。分别 运行三种方法的三组程序,运行中不断调整每次传 输数据的大小,并选择有代表性的结果记录下来, 根据这些结果以后做分析工作。 同样以套接字方式为例,说明测试结果过程。 修改客户程序中数组的大小,以调节传输数据的大 小,要传多大的数据就把数组设定为多大。首先要 测试一下系统开销,即传输很少甚至空字节时所需 要的时间,就把数组大小设为5,编译、运行,先 打开一个终端,运行服务器程序,再打开一个终 端,运行客户程序,当传输完毕时,客户程序就会 返回一个传输时间。特别需要注意的是,一定要先 运行服务器程序,否则客户程序的运行就会出错, 显示Connection refused。多次运行程序,发现每 次运行的结果并不完全一致,这是正常的现象,由 于CPU的时间调度问题以及进程的干扰等等复杂 的原因,使得即使我们在程序中已经使其传输5O 次来取平均值,但每次运行的结果还是相差几十甚 至几百微秒。由于本方法的结果还要和使用其它方 法的结果进行比较,同时为了保证所得结果的可靠 性和科学性,就决定采取多次运行程序,再取平均 值的策略。在实际操作过程中,每测试一定量的字 节数,就使该程序运行2O次,记录每次的结果, 再取一次平均值。测试完了系统开销,下面就开始 针对不同大小的字节测试传输时间了。实际上在使 用TCP/IP协议传输数据时,在数据前面加上IP 报头的时候,最少加上了2O个字节,如果没有可 选项和填充位的话,就正好是2O个字节,而其中 有2个字节表示包长度,这里的包长度是指整个包 的长度,包括数据的长度,这也就说明了一个包, 最大的长度就是65535个字节,在实际传输时,如 果要传更多的数据,那就只能另外打成多个包来传 了,既然如此,那么在选择测试数据时,最大的就 可以选在65535个字节,因为再测试更大的数据已 没有意义。因此就可以先粗略的把测试数据定在5 个字节到65535个字节。测试完了5个字节的时间 开销,就开始逐步增加所传的字节数,至于每次增 加的幅度,要随着测试结果的变化来逐步调整,使 得测试出来的数据每次的增幅不是特别大,也就是 尽量把工作做得更加细致,这样在与其方法结果的 作比较时,可以更加地准确。 得到三种方法传输不同大小数据时所需的时间 如下表: 管道: 

5b 323 24000b 740 46000b 1071 100b 333 26000b 777 48000b 1096 1000b 343 28000b 809 50000b 1 150 

http://www.lw23.com 论文网 论文大全http://www.lw23.com 论文网 论文大全第3期 孙叶萌:单机内进程间三种通信方法效率的比较 83 5000b 388 lO000b 470 12000b 560 14000b 596 16000b 619 18000b 665 20000b 695 22000b 729 30000b 32000b 34000b 36000b 38000b 40000b 42000b 44000b 52000b 54000b 56000b 58000b 60000b 62000b 64000b 65535 

3 结 论 通过对结果的分析发现对于使用管道这种方法 来传输数据,无论传输多大数据量,它所用时间都 基本上是固定的,这是因为建立管道很费时,但一 旦建立了以后,无论传多大数据,所用时间基本上 是相同的,而另外两种方法基本上都是随着传输字 节数的增加而增加的。这就启发我们,当要传输很 大的数据时,就可以使用管道这种方法。而在短字 节传输时,共享内存方法的优势很明显,即在 4500字节以前,它的速度都是很快的,只是在 4500字节以后,它时间开销的增长速度很快,就 基本被淘汰了,这使我们想到,在传输很少量的数 据时,可以使用共享内存方法。而在5000至 11000左右字节时,这两种方法都不如套接字方法 快,因此在这段时,就使用套接字方法。 以下是具体的分段方案: Ob一一一一一一4500b 共享内存 

4500b一一~一一11000b 套接字 11O00b一一一一一65535b 管道 最后对三种方法的可比性做一些说明,虽然把 数据放到实际网络中传输更加符合实际,但是也意 味着干扰数据传输的因素就更加多了,也就是每次 传输完毕返回的时间值的随意性就更强了。由于我 们的目的是测试比较几种方法的传输速度,因此我 们希望在每次测试时,受到的干扰越小越好,就是 说环境越纯粹越好,尽量使变化的仅仅是数据的长 度,而其它因素越稳定越好,这样才可以保证公平 的比较几种方法。而且由于共享内存和管道方法的 限制,即共享内存方法只能在单机内实现,管道传 输只能在父子进程间进行,因此就没有选择在多机 上进行测试,而是选择在相对来讲环境比较稳定的 单机内进行测试。 在统计时间的过程中,使用同一个函数:get— timeofday();取平均值也是规定同样的次数;测 试数据在同一台机器上进行,等等,这样做的目的 就是,尽量减少其它因素的干扰,使得测试的结果 更有可比性,数据更可靠。 参 考 文献 1 Scott Maxwell Linux内核源代码分析机械工业出版社 2000.6 2李卓横Linux网络编程机械工业出版社2000.1 

Research on the three methods of process communication Sun Yemeng (The Institute of Computer Science and Technology,JiLin University,Changchun,JiLin Province 130012) Abstract:Test the three methods of process communication,pipe,sharing memory and socket,in a single machine,and analyze the results tO see the relationship between the amount of data and the efficiency of each method.Finally get a rough section of the length of data,and make the transmission of data between processes more efficient. Key words:Pipe;Sharing memory;Socket;Efficiency of process communication