摘要: (转自:http://www.pediy.com/kssd/pediy08/pediy8-709.htm)Windows系统编程之异步I/O和完成端口【作者】北极星2003【来源】看雪技术论坛(bbs.pediy.com)【时间】2006年7月1日一、同步I/O和异步I/O在介绍这部分内容之前先来认识下“异步I/O”。说起异步IO,很容易联想到同步I/O,对于同一个I/O对象句柄在同一时刻只允许一个I/O操作,其原理如下图所示:显然,当内核真正处理I/O的时间段(T2~T4),用户线程是处于等待状态的,如果这个时间段比较段的话,没有什么影响;倘若这个时间段很长的话,线程就会长时间处于挂起状态。 阅读全文
posted @ 2013-05-06 19:16 imlucky 阅读(420) 评论(0) 推荐(0) 编辑
摘要: 需要首先说明的是异步I/O和多路复用同步I/O(如通过select函数在连接池中选择任一完成的端口)是有本质差异的,虽然两种方式都能提高效率。异步I/O的思想是在一个端口支持异步读写,读写异步的系统调用需要OS支持,比如Read、Write有异步的实现版本,则用户调用其Read、Write异步版本,如果端口暂时不可用,会立即返回到用户代码。可以针对同一个端口准备多个异步读写操作,充分利用端口资源以及减少用户在等待端口可用过程中被挂起的时间。一、Windows下的异步I/O的模型通过OVERLAPPED structure和WaitForMultipleObjects/WaitForMultip 阅读全文
posted @ 2013-05-06 19:14 imlucky 阅读(1012) 评论(0) 推荐(0) 编辑
摘要: 之前介绍了Node.js的事件机制,也许读者对此尚会觉得意犹未尽,因为仅仅只是简单的事件机制,并不能道尽Node.js的神奇。如果Node.js是一盘别开生面的磁带,那么事件与异步分别是其A面和B面,它们共同组成了Node.js的别样之处。本文将翻转Node.js到B面,与你共同聆听。异步I/O在操作系统中,程序运行的空间分为内核空间和用户空间。我们常常提起的异步I/O,其实质是用户空间中的程序不用依赖内核空间中的I/O操作实际完成,即可进行后续任务。以下伪代码模仿了一个从磁盘上获取文件和一个从网络中获取文件的操作。异步I/O的效果就是getFileFromNet的调用不依赖于getFile调 阅读全文
posted @ 2013-05-06 19:12 imlucky 阅读(511) 评论(0) 推荐(0) 编辑
摘要: 在 Windows 平台上不可用。Libeio是全功能的用于C语言的异步I/O库,建模风格和秉承的精神与libev类似。特性包括:异步的read、write、open、close、stat、unlink、fdatasync、mknod、readdir等(基本上是完整的POSIX API)。Libeio完全基于事件库,可以容易地集成到事件库(或独立,甚至是以轮询方式)使用。Libeio非常轻便,且只依赖于POSIX线程。Libeio当前的源码,文档,集成和轻便性都在libev之下,但应该很快可以用于生产环境了。 Libeio是用多线程实现的异步I/O库.主要步骤如下:主线程接受请求,将请求放入请 阅读全文
posted @ 2013-05-06 18:37 imlucky 阅读(4174) 评论(0) 推荐(0) 编辑