论文部分内容阅读
本文分析了Win32异步I/O的基本模式,利用异步I/O非阻塞的特点,提出了在一个线程内并发完成多个异步I/O的方法。在此基础上,为了更好地实现任务的分工,本文提出了多线程的异步I/O模型。该模型将任务分为两个基本部分,分别由主线程和工作者线程负责处理,其中主线程管理人机交互界面,而工作者线程专门在后台处理多路输入输出。根据不同任务对响应时间的不同需要,可以进一步将后台的多个输入输出任务分解到不同的工作者线程,赋予它们不同的优先级,高优先级的线程处理实时性要求高的任务,而低优先级的线程处理对响应要求宽松的任务。因此,这个多线程异步I/O模型不仅可以充分利用WindowsNT的SMP优势,而且能够适应对实时性能要求较高的应用环境。
多线程应用要求必须处理好线程的同步问题,以保证线程执行顺序的正确,同步多个线程对共享资源的访问,避免竞争条件和死锁。对于主线程与工作者线程间的同步,以及线程内部多个异步I/O完成后的同步,本文中统一采用了wait函数和事件同步对象的方法。为了实现对多线程共享数据的保护,可以采用多种同步机制,这里主要利用临界区对象来确保多线程对关键共享信息的有序访问。
基于对Win32异步I/O模型的分析与设计,在第三章实现一个多线程的异步I/O应用。该应用由一个主线程和两个工作者线程构成,其中一个工作者线程管理一个8多口的串行异步卡,另一个工作者线程处理2路网络数据通信,它们共同构成了一个多种设备并发输入输出的应用环境。
针对这个异步I/O模型,本文进行了一些对比试验,通过试验定量地分析异步I/O模型中线程数量、处理器数量等因素与吞吐量之间的关系,验证该模型的正确性,提出了这类应用的基本原则和应用建议。