Windows服务器端编程-第二章 设备IO与线程通信-5-I/O完成端口
2007-07-31 11:18
253 查看
l I/O完成端口
Windows2000被设计成为一个安全的,健壮的,能够服务于数千个用户的操作系统。根据以往来看,通常使用以下两种模型之一编写服务应用程序:
l 串行模型
线程等待客户端的请求(通常通过网络)。当请求到达,线程醒来并处理客户端的请求。
l 并行模型
线程等待客户端的请求并产生一个新线程来处理请求。在新线程在处理客户端的请求时,老的线程循环处理另一个客户端的请求。新线程在完全处理完客户端的请求后退出。
串行模型的问题在于不能很好的处理多重的、并发的请求。如果两个客户端同时发出请求,一次仅能够处理一个;第二个请求必须等待第一个请求完成。设计成串行模型的服务应用程序在多处理器的机器上没有优势。很明显,串行模型用于简单的服务器应用程序比较好,较少的客户端连接使得请求能较快的被处理。Ping服务就是串行模型服务器应用程序的好例子。
由于串行模型的局限性,并行模型极其流行。在并行模型下,创建一个线程用来处理所有客户端的请求。其优势在于等待请求到来的线程仅有很少一点工作要做。大多数时候,线程在休眠。当客户端请求到来,线程醒来,创建新的线程来处理请求,然后等待另一个连接。这意味着进入的客户端请求可以被很方便的处理。并且,由于每个客户端请求有自己的处理线程,服务器应用程序能够进行很好的伸缩,在多处理器的机器上更有优势。因此在使用并行模型的情况下,升级硬件(添加CPU),服务器应用程序的性能也跟着提升。
并行模型的服务应用程序是在Windows下实现的。Windows小组注意到意味其性能并不像期望那样高。特别地,Windows小组注意到对大量并发客户端请求的处理意味着在系统中有大量的线程在同时运行。由于所有的线程都是可运行的(没有挂起和等待某些东西发生),微软意识到Windows的内核花费了太多时间在运行线程的上下文切换上,以至于线程没有足够的时间来干活。为了使Windows有一个令人信服的服务器运行环境,微软需要解决这个问题。结果就是I/O完成端口内核对象。
Windows2000被设计成为一个安全的,健壮的,能够服务于数千个用户的操作系统。根据以往来看,通常使用以下两种模型之一编写服务应用程序:
l 串行模型
线程等待客户端的请求(通常通过网络)。当请求到达,线程醒来并处理客户端的请求。
l 并行模型
线程等待客户端的请求并产生一个新线程来处理请求。在新线程在处理客户端的请求时,老的线程循环处理另一个客户端的请求。新线程在完全处理完客户端的请求后退出。
串行模型的问题在于不能很好的处理多重的、并发的请求。如果两个客户端同时发出请求,一次仅能够处理一个;第二个请求必须等待第一个请求完成。设计成串行模型的服务应用程序在多处理器的机器上没有优势。很明显,串行模型用于简单的服务器应用程序比较好,较少的客户端连接使得请求能较快的被处理。Ping服务就是串行模型服务器应用程序的好例子。
由于串行模型的局限性,并行模型极其流行。在并行模型下,创建一个线程用来处理所有客户端的请求。其优势在于等待请求到来的线程仅有很少一点工作要做。大多数时候,线程在休眠。当客户端请求到来,线程醒来,创建新的线程来处理请求,然后等待另一个连接。这意味着进入的客户端请求可以被很方便的处理。并且,由于每个客户端请求有自己的处理线程,服务器应用程序能够进行很好的伸缩,在多处理器的机器上更有优势。因此在使用并行模型的情况下,升级硬件(添加CPU),服务器应用程序的性能也跟着提升。
并行模型的服务应用程序是在Windows下实现的。Windows小组注意到意味其性能并不像期望那样高。特别地,Windows小组注意到对大量并发客户端请求的处理意味着在系统中有大量的线程在同时运行。由于所有的线程都是可运行的(没有挂起和等待某些东西发生),微软意识到Windows的内核花费了太多时间在运行线程的上下文切换上,以至于线程没有足够的时间来干活。为了使Windows有一个令人信服的服务器运行环境,微软需要解决这个问题。结果就是I/O完成端口内核对象。
相关文章推荐
- Windows服务器端编程-第二章 设备IO与线程间通信-6-创建完成端口
- Windows服务器端编程-第二章 设备IO与线程间通信-8-围绕I/O完成端口的架构
- Windows服务器端编程-第二章 设备IO与线程间通信-9-I/O完成端口对线程池的管理
- Windows服务器端编程-第二章 设备IO与线程间通信-7-将设备与完成端口关联
- Windows服务器端编程-第二章 设备IO与线程间通信-2-异步设备I/O操作基础
- Windows服务器端编程-第二章 设备IO和线程间通信-3-接收I/O请求的完成通知
- Windows服务器端编程-第二章 设备IO与线程间通信-10-线程池有多少线程
- Windows服务器端编程-第二章 设备IO与线程间通信-11-模拟已完成的I/O请求
- Windows服务器端编程-第二章 设备IO和线程间通信-4-警告式I/O的优缺点
- Windows服务器端编程-第二章 设备I/O与线程间通信-1
- Windows服务器端编程-第二章 设备IO与线程间通信-12-代码清单(完)
- Linux 的 IO 通信 以及 Reactor 线程模型浅析
- 消息队列NetMQ 原理分析2-IO线程和完成端口
- java io 不同线程之间的通信
- java IO 管道流 关于两个线程通信的问题
- Linux内核:IO设备通信的控制方式
- 线程、进程间的通信方式
- 如何在 Windows Mobile (WinCE 5.0) 中用Vc++编程查找并连接周围的蓝牙(Bluetooth)设备并实现数据通信
- 进程间和线程间通信
- Java多线程四:线程间通信/等待唤醒机制