windows下的IO模型之完成端口】的更多相关文章

本文整理于:http://blog.csdn.net/piggyxp/article/details/6922277 一. 完成端口的优点 完成端口会充分利用Windows内核来进行I/O的调度,是用于C/S通信模式中性能最好的网络通信模型,没有之一:甚至连和它性能接近的通信模型都没有. 微软提出完成端口模型的初衷,就是为了解决这种"one-thread-per-client"的缺点的,它充分利用内核对象的调度,只使用少量的几个线程来处理和客户端的所有通信,消除了无谓的线程上下文切换,…
异步选择(WSAAsyncSelect)模型是一个有用的异步I/O 模型.其核心函数是WSAAsyncSelect,该函数是非阻塞的 (关于异步io的理解详情可以看:http://www.cnblogs.com/curo0119/p/8461520.html) 它可以用来在一个socket上接收以windows消息为基础的网络事件.它提供了读写数据的异步通知功能,但不提供异步数据传送.WSAAsyncSelect模型的优势在于只需要一个主线程即可.缺点是必须要绑定窗口句柄.即要先调用create…
1.选择(select)模型:选择模型:通过一个fd_set集合管理套接字,在满足套接字需求后,通知套接字.让套接字进行工作. 选择模型的核心是FD_SET集合和select函数.通过该函数,我们可以们判断套接字上是否存在数据,或者能否向一个套接字写入数据. 用途:如果我们想接受多个SOCKET的数据,该怎么处理呢? 由于当前socket是阻塞的,直接处理是一定完成不了要求的 a.我们会想到多线程,的确可以解决线程的阻塞问题,但开辟大量的线程并不是什么好的选择: b我们可以想到用ioctlsoc…
异步选择模型类似的是,它也允许应用程序在一个或多个套接字上,接收以事件为基础的网络事件通知.对于异步选择模型采用的网络事件来说,它们均可原封不动地移植到事件选择模型.事件选择模型和异步选择模型最主要的差别在于网络事件会投递至一个事件对象,而非投递至一个窗口. 首先,初始化网络环境,创建一个监听的socket,然后进行bind,listen操作.接下来我们会创建一个网络事件对象,它和我们讲内核态下线程同步里边事件对象很类似,我们可以调用WSACreateEvent来创建它,其声明如下: WSAEV…
Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blog.csdn.net/jay900323/article/details/18140847 重叠I/O模型的另外几个优点在于,微软针对重叠I/O模型提供了一些特有的扩展函数.当使用重叠I/O模型时,可以选择使用不同的完成通知方式. 采用事件对象通知的重叠I/O模型是不可伸缩的,因为针对发出WSAWa…
在探索Windows操作系统的过程中,发现很多有意思 的东西. Windows下的访问控制模型也是我在Github上浏览代码时,无意中发现的. 项目地址 https://github.com/Krutonium/Windows-10-Login-Background-Changer 当我们登陆Windows操作系统时,系统会认证当前用户的用户名和密码,登陆成功后,便会生成一个访问令牌(Access Token).所有用户进程都会拥有这个令牌的副本. 当前正在运行的用户进程 令牌包含了用户权限和用…
1.linux文件系统和缓存 文件系统接口 文件系统-一种把数据组织成文件和目录的存储方式,提供了基于文件的存取接口,并通过文件权限控制访问. 存储层次 文件系统缓存 主存(通常时DRAM)的一块区域,用来缓存文件系统的内容,包含各种数据和元数据. 2.深入Linux文件IO机制 标准文件访问方式 标准文件IO流程图 直接IO 实现方式 open + O_DIRECT = 绕过内核缓冲区的直接访问,便有效避免了CPU和内存的多余时间开销. 直接绕过IO绕过缓存,不会出现write成功数据丢失的情…
1. Linux下的五种I/O模型 阻塞I/O模型: 一直阻塞      应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好. 如果数据没有准备好,一直等待….数据准备好了,从内核拷贝到用户空间,IO函数返回成功指示. 我们 第一次接触到的网络编程都是从 listen().send().recv()等接口开始的.使用这些接口可以很方便的构建服务器 /客户机的模型. 在调用recv()/recvfrom()函数时,发生在内核中等待数据和复制数据的过程. 当调用recv()函数时,系统首先查…
本文讨论的背景是Linux环境下的network IO. IO发生时涉及的对象和步骤: 对于一个network IO (这里我们以read举例),它会涉及到两个系统对象,一个是调用这个IO的process (or thread),另一个就是系统内核(kernel).当一个read操作发生时,它会等待内核经历两个阶段: 1  内核数据准备 (Waiting for the data to be ready) 2  内核把数据从内核空间,拷贝到用户空间中 (Copying the data from…
本文主要说明在Windows下操作文件的高级方法,比如直接读写磁盘,文件的异步操作,而文件普通的读写方式在网上可以找到一大堆资料,在这也就不再进行专门的说明. 判断文件是否存在 在Windows中并没有专门提供判断文件是否存在的API,替代的解决方案是使用函数GetFileAttributes,传入一个路径,如果文件不存在,函数会返回INVALID_FILE_ATTRIBUTES,这个时候一般就可以认为文件不存在.更严格一点的,可以在返回INVALID_FILE_ATTRIBUTES之后调用Ge…