西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页编程开发VC|VC++ → I/O完成端口的实现-Windows编程技巧

I/O完成端口的实现-Windows编程技巧

相关软件相关文章发表评论 来源:本站整理时间:2010/10/22 12:21:40字体大小:A-A+

作者:佚名点击:706次评论:0次标签: Windows 编程 完成端口

  • 类型:文字输入大小:8KB语言:中文 评分:5.0
  • 标签:
立即下载
I/O完成端口是Windows系统上提供的一种高性能内核对象,广泛被服务器应用程序采用。以前初学I/O完成端口时困惑于繁多的新概念与很多编程技巧。现在重新温习异步I/O,才终于清楚的认知了I/O完成端口于异步I/O的强大!

程序依葫芦画瓢原作者的程序,代码雷同度达90%(后面有下载地址),想自己添加些新的功能(添加可以查看I/O处理进度的功能),但迫于时间,没有完成。现在我上网是非常困难的,但对我来说也好,这样就有更多的时间看看书,少上上网了。

纯概念性程序,也没有截图 下载:http://down.cr173.com/soft1/CopyFileSources.rar

要想编写一个高性能的服务器应用程序,必须实现一个高效的线程模型。让太少或者太多的服务器线程来处理客户的请求,都可能导致性能问题。例如,如果一个服务器创建单个线程来处理所有的请求,那么客户端可能长期等待而得不到响应,因为服务器同一时刻只能忙于处理一个请求。当然单个线程也能并发处理多个请求,当I/O操作被启动时,它可以从一个请求切换到另一个请求,但是这种结构相当复杂,并且不能充分利用多处理器的优势。在另一个极端,服务器可以创建一个大规模的线程池,这样几乎每一个客户请求都可以由一个专门的线程来处理。这种情形通常会导致线程频繁切换:大量线程被唤醒,执行CPU处理,阻塞等待I/O,然后在请求完成之后又一次阻塞以等待新的请求。如果没有别的情况,太多的线程将导致过多的上下文切换,因为调度程序不得不将处理器时间在多个活动线程之间分割。

服务器的目标是使线程避免不必要的阻塞,尽量减少上下文切换。同时,还要使用多线程来发挥最大限度的并行。理想的情况是在每一个处理器上运行一个线程来处理一个客户请求,当处理器上的活动线程完成一个请求时,如果还有其他的请求正在等待,则不阻塞。为了使这一优化处理可以有效的进行,应用程序必须有一种可行的方法,使得一个正在处理客户请求的线程在I/O上阻塞时(例如它在处理过程中需要读取一个文件时)另外一个等待线程被激活。

Windows NT 3.5引进了一系列API使得这个目标的实现变得相对容易。这些API主要聚焦在一个叫完成端口的对象上。在本文中,首先我将讲解完成端口的使用,然后再深入其内部,向你展示Windows NT中完成端口的实现机制。

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)