windows高级程序设计大作业

windows高级程序设计大作业

ID:9293595

大小:32.89 KB

页数:13页

时间:2018-04-26

windows高级程序设计大作业_第1页
windows高级程序设计大作业_第2页
windows高级程序设计大作业_第3页
windows高级程序设计大作业_第4页
windows高级程序设计大作业_第5页
资源描述:

《windows高级程序设计大作业》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、目录一、什么是同步和异步I/O?2二、为什么有两种I/O模型?2三、如何进行可伸缩的I/O操作。2四、Windows的I/O模型。3五、Windows的几种异步I/O模型。35.1I/O的处理速度35.2Windows的四种异步I/O35.3重叠属性35.4完成例成的使用35.5事件的介绍与用法.35.6异步过程调用的介绍。35.7使用多线程的异步I/O。313《高级系统程序设计》课程考核大作业Windows操作系统中对I/O操作进行了非常好的设计,把文件和所有其他的输入输出设备的操作都统一由CreateFile等系列函数完成,论述I/O操作

2、的同步方式和异步方式各自的特点。异步方式主要由4种实现形式,从理论描述和实践编写程序2个方面分别论述这4种形式的异同,并掌握它们的运用方法,必须要给出程序的设计思考过程和关键程序代码。一、什么是同步和异步I/O?同步(Sync)和异步(Async)的概念来自电信领域。它们主要用来处理时钟——同步通讯需要一个外部时钟信号来调整发送/接收方的节拍,而在异步模型中,任何需要的时钟信息从编码过的通讯信号中恢复(解码)而得到。同步/异步引入到计算机中是一个不同的概念:“对于异步操作,I/O请求独立于I/O处理流程,而在同步模型中,I/O请求必须等到操作

3、确认完成。特殊的,“异步I/O在I/O处理过程中允许其他例程继续执行;在同步I/O中,操作的发起者必须等到硬件处理完I/O,返回操作的结果”。二、为什么有两种I/O模型?同步I/O模型很容易理解使用起来也简单,但是需要等待I/O操作执行,这样一来,性能将受到极大限制。例如: 客户在输入数据,到数据到达客户的这段时间,可以说服务器进程是一直在等待着的,甚至说如果客户不发(或者说没东西可以发),它也那对方没办法,进程一直卡着。于是我们就拿他没辙了。。。如果有多个套接字描述符,比如多个服务器进程,跟不同的客户进行交互,这种情况简直是不可想象的。  

4、  于是我们需要一种方法,来知道哪个套接字准备好了,我们就立即动手。select就是这个作用,这也就是所谓的I/O复用技术,更一般的方法,叫做轮询,也就是我们不停的去检测询问套接字准备好了没有,这样也可以,但是效率太低,极度耗费CPU资源。 以上两个都是阻塞模型,也就是说,该等的还是得等,虽然以上两种方法并不能让我们不等。异步I/O的基本动机是获得高性能。实际上,它基于两点前提假设:I/O操作是耗时的,在I/O进行中,有大量时间可以让CPU执行其他任务指令。当I/O操作返回的结果不可用时,有大量的指令可以执行。如果这两个前提不满足,即使使用高

5、效的异步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的

6、调用只在请求操作完成时才返回。但是并不意味着这个调用会阻塞。例如,假设要从socket读取数据,在发起读请求之前socket缓冲区中已有数据,这时read()将会成功返回且不会阻塞。为了避免在I/O操作阻塞时CPU空转,可以继续执行和这个PendingI/O无关的其他任务,或者是在恰当的时间发起I/O请求来避免I/O阻塞(bruce注:这是I/O多路复用的关键)。也就是说:多任务处理(Multitasking)——在I/O请求发起13后,其他逻辑代码得到执行,同时,在I/O结束后,I/O操作后面的代码可以得到执行。I/O多路复用(I/OMul

7、tiplexing)——使用一个线程处理多个同步I/O设备句柄(devicehandles)。这个模型的关键是:仅在确定执行调用的线程不会被阻塞时才去调用I/O函数(因为即使没有发起任何类似connect(),read()的I/O操作,此时数据已经是就绪状态)。可以调用像select,poll,epoll这些同步类型的函数来检测多个设备句柄的状态,确认对它们进行I/O操作不会被阻塞。实际上,I/O多路复用提供了一种方式:使用一个同步调用来检测多个设备句柄的状态。它只会在一些句柄上有事件产生时才返回。这样就可以用一个线程处理多个同步I/O操作。

8、可伸缩异步I/O模型,在异步I/O模型中,发出请求后I/O调用会立即返回,后面的代码将继续执行。下面这些模型中区别只在于:怎么获取I/O完成通知。轮询(Pollin

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。