IOCP在水下安防系统监控软件中应用.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
IOCP在水下安防系统监控软件中应用

IOCP在水下安防系统监控软件中应用   摘 要: 在此给出完成端口在某水下安防系统监控软件中的一种应用,在简要介绍完成端口模型的基础上,叙述了利用完成端口实现安防系统监控软件底层通信模块的方法,并构建了一个完整的监控中心数据服务器构架。该方法提高了监控软件网络通信的数据吞吐率,节约了CUP资源,同时在该构架下能够轻松实现安防系统软硬件的扩展和升级。   关键字: 完成端口(IOCP); 网络通信; 水下安防系统; 监控软件   中图分类号: TN964?34 文献标识码: A 文章编号: 1004?373X(2015)04?0077?03   某水下安防系统监控中心通过网络交换机将各个传感器子系统连接到局域网中,各传感器子系统包括水下被动声纳、水面雷达、岸基式AIS等组成,通过监控中心千兆网络交换机连接到两台监控中心主机上,其中主机1完成安防状态三维显示及数据服务器的功能,主机2负责安防状态控制功能。监控中心各子系统主机通过TCP方式(即C/S模式)与主机1数据服务器连接,监控中心的主机2接收数据服务器转发各传感器子系统的数据,各子系统之间通过主机1数据服务器可自由收发数据。   1 必要性   图1是监控中心各子系统网络连接图。在Windows操作系统中通常实现网络通信程序有如下这几种模型:Select,WSAAsyncSelect,WSAEventSelect,I/O重叠模型、完成端口[1]。前面3种模型采用阻塞模式对端口进行操作,具有编程简单易用的特点,适用于数据吞吐量不大的应用。另外,在阻塞模式下,程序在处理多个客户端并发事件时需要对每一个客户开辟一个线程去处理,此时响应多个客户请求时就需要CPU不停地在每个线程之间进行上下文的切换,因为线程切换是相当浪费CPU时间的,所有阻塞通信加多线程模式是一种需要占用大量CPU时间的编程模式。   I/O重叠模型和完成端口模型都高性能的非阻塞异步通信模式[1],非阻塞的异步通信模式通常内部提供了线程池的管理,可以避免反复创建线程的开销,同时可以根据CPU的个数灵活地决定线程个数,而且可以减少线程调度的次数从而提高性能,大大降低了CPU的占用时间。非阻塞的异步通信模式通常编程难度大,一般只应用与大型服务器。该安防系统各子系统数据采集时间不相同,采集数据量大易导致网络上出现多个并发事件,需要数据服务器同时响应并处理并发事件,作为监控中心主机1(数据服务器)的网络通信程序必须采用高性能非阻塞的异步通信模式编写。另外,数据服务器主机同时需要负责安防态势的解算、三维场景计算及实时显示功能,对CPU和内存等系统资源使用要求较高。I/O重叠模型和完成端口模型都是高性能的非阻塞异步通信模式,考虑到编程难度相当且完成端口的性能更加优秀,因此在该项目中使用更高性能的完成端口(IOCP)模型编制服务器程序。   2 IOCP简介   完成端口(Completion Port)是一种基于重叠 I/O(Overlapped I/O)的高性能异步通信机制,使用设备内核对象来协调数据的发送和接收[2]。当使用完成端口进行网络通信时,应用程序只需要向操作系统提交数据发送和接收的请求,此时应用程序可以自由地做其他事情而不会被阻塞,操作系统会在网络I/O操作“完成”之后通知应用程序,应用程序在接到系统的通知时,网络操作已经完成,此时应用程序只需要处理后面的事情了。完成端口就是不断投递重叠 I/O 操作,将耗时的操作交给系统后台进行,应用程序便获得了解放。   3 IOCP的实现   作为Windows操作系统最复杂的内核对象,下面简要说明完成端口实现的步骤[1]:   (1) 调用CreateIoCompletionPort( HANDLE FileHandle,HANDLE ExistingCompletionPort, ULONG_PTR CompletionKey,DWORD NumberOfConcurrentThreads)函数创建一个完成端口,函数第4个参数保持为0,它指定在完成端口上每个CPU一次只允许执行一个工作者线程;   (2) 判断系统内有几个CPU;   (3) 创建工作者线程,根据步骤2得到的CPU信息,在完成端口上为已完成的I/O请求提供服务,为避免由于线程数量不足而使CPU处于空闲的局面,通常创建2倍于CPU数量的工作者线程以供使用;   (4) 准备好一个监听套接字,绑定到本机IP上,在端口5000上监听传入的连接请求;   (5) 使用AcceptEX函数,接受入站的连接请求;   (6) 创建一个数据结构,用于保存单句柄数据,同时在结构中存入接受的套接字;   (7) 调用CreateIoCompletionPort,将自AcceptEx返

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档