目录
一、什么是同步和异步I/O? 2
二、为什么有两种I/O模型? 2
三、如何进行可伸缩的I/O操作。 2
四、Windows的I/O模型。 3
五、Windows的几种异步I/O模型。 3
I/O的处理速度 3
Windows的四种异步I/O 3
重叠属性 3
的使用 3
绍与用法. 3
异步过程调用的介绍。 3
程的异步I/O。 3
《高级系统程序设计》课程考核大作业
Windows操作系统中对I/O操作进行了非常好的设计,把文件和所有其他的输入输出设备的操作都统一由CreateFile等系列函数完成,论述I/O操作的同步方式和异步方式各自的特点。异步方式主要由4种实现形式,从理论描述和实践编写程序2个方面分别论述这4种形式的异同,并掌握它们的运用方法,必须要给出程序的设计思考过程和关键程序代码。
一、什么是同步和异步I/O?
同步(Sync)和异步(Async)的概念来自电信领域。它们主要用来处理时钟——同步通讯需要一个外部时钟信号来调整发送/接收方的节拍,而在异步模型中,任何需要的时钟信息从编码过的通讯信号中恢复(解码)而得到。
同步/异步引入到计算机中是一个不同的概念:“对于异步操作,I/O请求独立于I/O处理流程,而在同步模型中,I/O请求必须等到操作确认完成。特殊的,“异步I/O在I/O处理过程中允许其他例程继续执行;在同步I/O中,操作的发起者必须等到硬件处理完I/O,返回操作的结果”。
二、为什么有两种I/O模型?
同步I/O模型很容易理解使用起来也简单,但是需要等待I/O操作执行,这样一来,性能将受到极大限制。例如: 客户在输入数据,到数据到达客户的这段时间,可以说服务器进程是一直在等待着的,甚至说如果客户不发(或者说没东西可以发),它也那对方没办法,进程一直卡着。于是我们就拿他没辙了。。。如果有多个套接字描述符,比如多个服务器进程,跟不同的客户进行交互,这种情况简直是不可想象的。
于是我们需要一种方法,来知道哪个套接字准备好了,我们就立即动手。select就是这个作用,这也就是所谓的I/O复用技术,更一般的方法,叫做轮询,也就是我们不停的去检测询问套接字准备好了没有,这样也可以,但是效率太低,极度耗费CPU资源。 以上两个都是阻塞模型,也就是说,该等的还是得等,虽然以上两种方法并不能让我们不等。
异步I/O的基本动机是获得高性能。实际上,它基于两点前提假设:I/O操作是耗时的,在I/O进行中,有大量时间可以让CPU执行其他任务指令。当I/O操作返回的结果不可用时,有大量的指令可以执行。如果这两个前提不满足,即使使用高效的异步I/O模型,程序性能也可能得不到提升。
总的来说,同步I/O的意思应该是I/O操作期间,应用进程必须等待,直到该I/O完了。相反,异步 I/O 操作在后台运行, I/O 操作和应用程序可以同时运行,提高了系统性能。所以异步的特点是,当I/O完成以后,内核才通知应用程序。
三、如何进行可伸缩的I/O操作。
可伸缩I/O模型的挑战是:在I/O操作发起后(可能使用同步或异步方式)可以执行什么代码?
怎么检测I/O操作已经完成,以及完成以后可以做什么?可伸缩I/O操作可以使用同步或异步方式来实现。
可伸缩同步I/O模型,在同步I/O模型中,对API的调用只在请求操作完成时才返回。但是并不意味着这个调用会阻塞。例如,假设要从socket读取数据,在发起读请求之前socket缓冲区中已有数据,这时read()将会成功返回且不会阻塞。为了避免在I/O操作阻塞时CPU空转,可以继续执行和这个Pending I/O无关的其他任务,或者是在恰当的时间发起I/O请求来避免I/O阻塞(bruce注:这是I/O多路复用的关键)。也就是说:多任务处理(Multitasking)——在I/O请求发起后,其他逻辑代码得到执行,同时,在
I/O结束后,I/O操作后面的代码可以得到执行。
I/O多路复用(I/O Multiplexing)——使用一个线程处理多个同步I/O设备句柄(device handles)。这个模型的关键是:仅在确定执行调用的线程不会被阻塞
windows高级程序设计大作业 来自淘豆网www.taodocs.com转载请标明出处.