今天把SDK的UnBufCpy的例子编译了一下,令人吃惊的是在我的机器(P42.66,512M Ram 80G7200HDD)上的Copy速度竟然是4085.11M/s
看了看代码,原来完成端口是如此的NB。
只是代码中的注释:
Abstract:
This single-threaded version shows how to multiplex I/O to a number of files with
a single thread. This is the most efficient mechanism if you do not need the
asynchronous completion model that the dual-threaded version offers.
Only one thread and one I/O completion port is used. The file handles for the
source and destination file are both associated with the same port. The
thread starts off by posting a number of overlapped
reads from the source file. It then waits on the I/O completion port.
Whenever a read completes, it immediately turns it around into a write to
the destination file. Whenever a write completes, it immediately posts the
next read from the source file.
Thread 1
|
|
kick off a few
overlapped reads
|
|
->GetQueuedCompletionStatus(WritePort) <-----------
| | |
| |------------------------------- |
| | | |
| write has completed, read has completed, |
| kick off another kick off the write. |
| read | |
| | | |
|____| |_____________|
比FileMap的方式还要快几个数量级
看来MS SDK中还是又很多宝的