精华帖 (4) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-17
I/O completion ports are the mechanism by which an application uses a pool of threads that was created when the application was started to process asynchronous I/O requests. 有人就以此来解释说I/O completion ports就是使用线程池来实现. 但我觉得似乎没有那么简单,这里说的线程池感觉只是针对外围使用的. I/O completion ports的作用主要用于在大量连接的时候减少线程数,从而降低因为线程切换而带来的系统开销,从而提高效率. 在socket中,因为listen会阻塞线程,所以原来必须每个连接配备一个thread,用异步因为受到event wait的制约,所以一个thread最多也只能支持64个连接. 所以我的猜测I/O completion ports最大的作用是能够让一个线程支持尽量多乃至无限多个连接,这样在大量连接的情况下就不需要频繁的切换thread. 而所冠以I/O,可能说明其实现模仿类似硬件I/O的操作,使用模拟中断(或干脆使用硬件中断)的方式来管理进出数据,然后将这些数据管理起来在线程内进行分发. 而这里提到的线程池是因为,虽然一个thread可以处理很多连接,内部分发无论采用何种方式,如果连接过多会造成局部阻塞、分配不均或效率低下,所以又结合了线程池的方法予以均化工作. 应该说I/O completion ports是MS对socket listen机制的一种优化吧. 以上是我个人的推测,不知道有哪位仔细研究过windows source的大大给一个标准答案? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-07-18
completion应该是基于overlapped io的,也就是一个线程可以把io操作交给另一个线程,自己继续往下跑,io“完成”后,会通知这个线程,这似乎和线程池里的线程不一样。
|
|
返回顶楼 | |
发表时间:2007-07-18
windows有专门的overlapped I/O socket给异步socket使用.
I/O completion ports则是独立的方法. 也许底层实现由部分公用之处,但应该还有差异. |
|
返回顶楼 | |
发表时间:2007-07-18
Arath 写道 windows有专门的overlapped I/O socket给异步socket使用.
I/O completion ports则是独立的方法. 也许底层实现由部分公用之处,但应该还有差异. 我说的是基于overlapped,由系统管理一组线程处理overlapped io,就成为了 io completion ports. 这是msdn的说法。 The overlapped I/O mechanism in Win32® allows an application to initiate an operation and receive notification of its completion later. This is especially useful for operations that take a long time to complete. A completion port is a queue into which the operating system puts notifications of completed overlapped I/O requests. Once the operation completes, a notification is sent to a worker thread that can process the result. A socket may be associated with a completion port at any point after creation. |
|
返回顶楼 | |
发表时间:2007-07-18
恩,这样解答了部分问题,I/O completion ports其实就是在socket整合到overlapped I/O中,当socket有任何操作完成后就通知给一个或多个工作线程.
但是还是没有完全解决所有的问题,overlapped I/O依然是个黑盒子,同时如何将socket整合进去也是一个问题. Windows下overlapped I/O能够管理所有的I/O操作,包括file、namepiple、socket等,从硬件角度来看这些操作都涉及到I/O或者工作类似. 虽然冠以了一个overlapped的新名字,但是我感觉可能很最基本还是用最最基础的中断模式在工作. |
|
返回顶楼 | |
发表时间:2007-07-18
如果overlapped如果猜测的是中断模式工作,那么socket整合进去倒也没有什么难度,网卡本来就是利用中断工作的.
|
|
返回顶楼 | |
发表时间:2007-07-18
理论上中断模式在windows的保护模式下是不起作用的。
http://blog.csdn.net/normalnotebook/archive/2006/07/30/999840.aspx 这篇文章非常好的说。 |
|
返回顶楼 | |
发表时间:2007-07-18
中断内核还是可以用得
|
|
返回顶楼 | |
发表时间:2007-07-18
这篇文章还是更多的在介绍使用,并没有完全解释我的问题.
|
|
返回顶楼 | |
发表时间:2007-07-18
恶。。。。大概用不到中断吧,windows本身就是基于消息机制的。事件通知模型而已。
|
|
返回顶楼 | |