IO Complement Port(完成端口)

转载 2016年06月02日 09:17:47

参考:

        1.  http://www.cnblogs.com/lancidie/archive/2011/12/19/2293773.html   此文很详细地阐述了Overlapped IO, 并重点说明和实现完成端口范例。

        2. 《Win32多线程程序设计》 侯捷译.    第六章Overlapped IO


部分摘录:

   1.所谓 scalable 系统,是指藉着 RAM 或磁盘空间或 CPU 个数的增加而能够提升应用程序效能的一种系统。

        2.  靠着“一大堆线程服务一大堆events ”的性质, completion ports比较容易建立起 “ scalable” 服务器。

   3. IO Completion Ports特点:
        i WaitForMultipleObjects() 不同,这里不限制handles 的个数。
        i I/O completion ports 允许一个线程将一个请求暂时保存下来,而由另一个线程为它做实际服务。
        i I/O completion ports 默默支持 scalable 架构。
        4.   I/O completion port是一种非常特殊的核心对象,用来综合一堆线程,让它们为“overlapped 请求”服务。其所提供的功能甚至可以跨越多个 CPUs,Completion port可以自动补偿成长中的服务器,适合应用于沉重的负担。

   5.大略可以这样描述一个 com pletion port:它是一个机制,用来管理一堆线程如何为completed overlapped I/O requests服务。然而,completion port远比一个简单的分派器丰富得多, I/O completion port 也像一个活门(阀)一样,保持一个CPU 或多个 CPUs 尽可能地忙碌,但也避免它们被太多的线程淹没。 I/O com pletion port 企图保持并行处理的线程个数在某个数字左右。一般而言你希望让所有的CPUs 都忙碌,所以默认情况下并行处理的线程个数就是 CPUs 的个数。

    6. 操作概观

      a. 产生一个 I/O completion port
      b. 让它和一个文件 handle 产生关联。
      c. 产生一堆线程。
      d. 让每一个线程都在 com pletion port上等待。
      e. 开始对着那个文件 handle 发出一些 overlapped I/O 请求。


   7. 产生一堆线程
     一旦 completion port 产生出来,你就可以设立在该 port 上等待的那些线程了。I/O completion port 并不自己产生那些线程,它只是使用由你产生的线程。因此,你必须自己以 CreateThread() _beginthreadex() (第8章)或AfxBeginThread()(第10 章)产生出线程。当你一产生这些线程时,它们都应该在 completion port 上等待。当线程开始为各个“请求”服务时,池子里的线程的组织如下:
        目前正在执行的线程
      + 被阻塞的线程
      + com pletion port 上等待的线程
     --------------------------------------------
      = 池子里的所有线程的个数




重叠IO-完成端口

Email:kruglinski_at_gmail_dot_com Blog:kruglinski.blogchina.com 早在两年前我就已经能很熟练的运用完成端口这种技术了,只是一直没有...
  • zanfeng
  • zanfeng
  • 2014年02月15日 01:55
  • 2972

IO完成端口与线程池

具体情况参考《windows核心编程》第五版的第十章第十一章 (Vista以上) MSDN示例http://msdn.microsoft.com/en-us/library/windows/des...
  • jiht594
  • jiht594
  • 2012年06月06日 13:11
  • 5470

用IO完成端口提高读写速度的探讨试验

Ⅰ 问题提出:我在写硬盘时通常采用简单的同步IO技术,这可以解决多数工作中的问题,所以并没有注意使用异步模式。后来对一个盘阵进行测速时,发现用我们自研的测速工具的测试结果达不到从高速数据源接收记录数据...
  • BleakXanadu
  • BleakXanadu
  • 2009年03月03日 15:39
  • 4541

利用IO完成端口实现高性能的UDP或TCP通信

在重构通信层的过程中,因为需要增加连接会话处理,
  • gongbenwen
  • gongbenwen
  • 2014年09月30日 18:55
  • 491

Windows socket之IO完成端口(IOCP)模型开发(原作者:csdn——ithzhang)

Windows socket之IO完成端口(IOCP)模型开发       IO完成端口是一种内核对象。利用完成端口,套接字应用程序能够管理数百上千个套接字。应用程序创建完成端口对象后,通过指...
  • gsls181711
  • gsls181711
  • 2013年11月06日 16:53
  • 943

理解完成端口(IO completion port)

     关于完成端口网上有很多文章,不过我个人觉得大多都讲得不够清楚。给的例子要不就是给一个复杂的封装,要不就是给一个简单的收发数据。注意,完成端口不仅仅用于网络数据的收发,它可以用于windows...
  • kevinlynx
  • kevinlynx
  • 2008年01月27日 19:54
  • 2689

《windows核心编程》读书笔记——完成端口

完成端口是windows为了处理不同设备之间并发运行时运行速度差异而设计的一种异步数据处理的机制。完成端口是《windows核心编程》中的一个重点内容,最近我花了三天时间读完核心编程里面关于完成端口的...
  • eagleatustb
  • eagleatustb
  • 2012年10月31日 17:19
  • 1394

关于IO完成端口的一些思考

在Jeffery Richter先生的Windows核心编程一书中,有大量篇幅对IO完成端口进行讲解,但是由于...
  • gongbenwen
  • gongbenwen
  • 2014年11月04日 22:47
  • 844

异步IO、APC、IO完成端口、线程池与高性能服务器

原作者姓名 Fang(fangguicheng@21cn.com)异步IO、APC、IO完成端口、线程池与高性能服务器之一 异步IO背景:轮询 PIO DMA 中断    早期IO设备的速度与CPU相...
  • lao_mage
  • lao_mage
  • 2006年10月11日 17:02
  • 2498

Socket编程模型之完成端口模型

用完成例程来实现重叠I/O比用事件通知简单得多。在这个模型中,主线程只用不停的接受连接即可;辅助线程判断有没有新的客户端连接被建立,如果有,就为那个客户端套接字激活一个异步的WSARecv操作,然后调...
  • caoshiying
  • caoshiying
  • 2016年10月23日 20:09
  • 2198
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IO Complement Port(完成端口)
举报原因:
原因补充:

(最多只允许输入30个字)