1、Overlapped I/O,字面讲就是重叠I/O,意思是一个I/O操作还没有结束,就可以同时再开始另一个I/O操作,因此,也就是有异步I/O能力的意思(细究还有表达的意思稍有不同,Overlapped I/O首先就要求的一定是异步的I/O。)。
2、Windows的许多对象都可以视为可I/O对象。如:files, named pipes,and serial communications devices,sockets等。对这些可I/O对象,我们都可以进行同步(synchronization)的或异步(asynchronization or overlapped)的I/O操作。
3、Windows有许多API可同时用于这些同步或异步的I/O操作,如:ReadFile\WriteFile。但ReadFileEx\WriteFileEx却仅用于异步操作。
4、同步I/O操作,意味着操作者必须等待time-consuming(耗时的)I/O操作执行完毕后,才能进行之后的操作。也就是说,操作者发起同步I/O操作后,此线程将被block。
5、而异步I/O操作,则在发起I/O操作后,可立即得到返回的状态,而不必等待操作的完成。真正的I/O操作交由操作系统在后台完成后,以通知的形式再告知操作者。因此,操作者可以在此时同时处理其他任务,而不是无事可做。
6、而Overlapped I/O则更进一步将异步I/O进行封装,可以处理实际应用中需要同时处理大量异步I/O的情况(scenario)。因为,普通异步I/O中需要开启多个线程,进行线程切换操作(如,一个线程实际等I/O完成信号,另一个线程做其他事情,有信号后,再切换到此I/O线程中去处理。);而如果应用程序要处理大量这种线程切换的话,这个性能的问题将会凸显出来。因此,微软将这种大量异步I/O的应用封装成了Overlapped I/O交由操作系统来完成,提供队列管理,缓冲池管理,并结合实际CPU等的硬件性能做合理的调度。这样的话,就减轻了应用程序在实现大量异步I/O时的难度和复杂性。
网友评论