同步IO是指:线程在发起IO请求后会被挂起,IO完成后继续执行. 异步IO是指:线程发起IO请求后并不会挂起而是继续执行.IO完毕后会得到设备驱动程序的通知. 一.异步准备与OVERLAPPED结构 (1).为了以异步的方式来访问设备,必须先调用CreateFile,并在dwFlagsAndAttributes参数中指定FILE_FLAG_OVERLAPPED标志来打开设备.该标志告诉系统要以异步的方式来访问设备. 为了将I/O请求加入设备驱动程序的队列中,必须使用ReadFile和WriteF…
异步设备IO:OVERLAPPED和IOCompletionPort 本文内容为<windows核心编程>第10章内容的总结,仅记录一些本人感兴趣的内容. 1:OVERLAPPED "overlapped"的意思是执行IO请求的事件与线程执行其他任务的时间是重叠的(overlapped). overlapped是执行设备异步IO的基础.overlapped结构定义如下: Descriptio:Contains information used in asynchronous…
Github https://github.com/gongluck/Windows-Core-Program.git //第10章 同步设备IO与异步设备IO.cpp: 定义应用程序的入口点. // #include "stdafx.h" #include "第10章 同步设备IO与异步设备IO.h" //可提醒IO回调 VOID WINAPI funComplete( _In_ DWORD dwErrorCode, _In_ DWORD dwNumberOfBy…
同步设备IO与异步设备IO之异步IO介绍 设备IO与cpu速度甚至是内存访问相比较都是比较慢的,而且更不可预测.虽然如此,通过使用异步设备IO我们仍然能够创造出更高效的程序. 同步IO时,发出IO请求的线程会被挂起.而异步IO时发出请求的线程不会被挂起,而是可以继续执行.异步IO请求传给了设备驱动程序,被加入到驱动程序的请求队列中,驱动程序负责实际的IO操作.当设备驱动程序完成了对队列中IO请求的处理,无论成功与否都必须通知应用程序. 异步IO非常关键的一点就是将IO请求加入驱动程序队列,这是设…
同步设备IO 所谓同步IO是指线程在发起IO请求后会被挂起,IO完成后继续执行. 异步IO是指:线程发起IO请求后并不会挂起而是继续执行.IO完毕后会得到设备的通知.而IO完成端口就是实现这种通知的很好的一种方式. 线程是我们开发高性能.响应性好的一个必不可少的工具.这样在多处理器上就可以同时执行多个操作,从而提高吞吐量.当线程发出一个同步设备IO请求的时候,它会被临时挂起,直到设备完成IO请求为止.但线程阻塞会损害性能,这里有个问题是我们如何让线程不被挂起. 让线程始终进行有用的工作就需要它们…
同步设备IO 所谓同步IO是指线程在发起IO请求后会被挂起,IO完成后继续执行. 异步IO是指:线程发起IO请求后并不会挂起而是继续执行.IO完毕后会得到设备的通知.而IO完成端口就是实现这种通知的很好的一种方式. 线程是我们开发高性能.响应性好的一个必不可少的工具.这样在多处理器上就可以同时执行多个操作,从而提高吞吐量.当线程发出一个同步设备IO请求的时候,它会被临时挂起,直到设备完成IO请求为止.但线程阻塞会损害性能,这里有个问题是我们如何让线程不被挂起. 让线程始终进行有用的工作就需要它们…
异步IO操作与同步操作区别: 在CreateFile里的FILE_FLAG_OVERLAPPED标志 异步操作函数LPOVERLAPPED参数 接收IO请求完成通知 触发设备内核对象 缺点:同一个设备内核对象有可能进行多次读写操作,这样第一个完成这个设备内核对象就会被触发,所以这种方式不可以使用于这种情形 void Test1() { HANDLE hFile = ::CreateFile(_T("aaa.txt"), GENERIC_READ, FILE_SHARE_READ, NU…
10.3 执行同步设备I/O (1)对设备读写操作的函数 ①ReadFile/WriteFile函数 参数 描述 hFile 文件句柄 pvBuffer 指向要接收文件数据的缓冲区或把缓冲区数据写入设备 nNumbytesToRead 要读取的字节数或写入的字节数 pdwNumBytes 实际读取的字节数或写入的字节数 pOverlapped 指向OVERLAPPED结构体. ①要进行同步读写时,该参数为NULL,同时打开设备的时候,标志不能指定为FILE_FLAG_OVERLAPPED. ②要…
10.5 接收I/O请求完成的通知 (1)I/O请求被加入设备驱动程序的队列,当请求完成以后,设备驱动也要负责通知我们I/O请求己经完成. (2)可以用4种方法来接收I/O请求己经完成的通知 技术 特点 触发设备内核对象 ①允许一个线程发出I/O请求,另一个线程对结果进行处理. ②当向一个设备同时发出多个I/O请求的时候,这种方法是不能用的,因为等待函数中等待的是同一个内核对象,只要任何一个I/O请求完成时都会被触发,却没办法区别是哪个请求的完成触发了内核对象. 触发事件内核对象 ①允许一个线程…
首先先看如下几个问题,或者说我们经常会遇到的问题. 阻塞是否等于同步?非阻塞是否等于异步?同步一定是阻塞的么?异步一定是非阻塞的么?要把这四个概念讲明白,先从一顿简餐说起.假设你要做一顿便饭:烧土豆:烧茄子和米饭.CPU代表你,如下事件代表操作: A1.切土豆.A2.烧土豆 B1.切茄子.B2.烧茄子 C1.淘米.C2.煮饭: 情况1:你做完A1再做B1再做C1,即:切完土豆.切茄子最后淘米: 情况2:你干一会A1再干一会B1,再干一会C1,即:一会切土豆.一会切茄子.一会淘米,直到三者做完:…
通过数据库评估存储设备IO性能 ---------Oracle11g IO校准功能介绍 前言 I/O子系统是ORACLE数据库的一个重要组成部分,因为I/O操作是贯穿数据库管理全过程,它操作的对象包括日志.表.索引.数据字典.以及一些排序.undo操作等等,每个数据库读取或者写入磁盘上的数据,都会产生磁盘IO,可以这么说一个正常业务的数据库系统,80%的性能消耗都与IO有关,相对于网络.CPU.内存等其他硬件的迅猛发展,磁盘的读写速度的发展却相对滞后,这也导致许多业务性能瓶颈集中在有限的磁盘IO…
编辑手记:本文主要讲解Linux IO调度层的三种模式:cfp.deadline和noop,并给出各自的优化和适用场景建议. 作者简介: 邹立巍 Linux系统技术专家.目前在腾讯SNG社交网络运营部 计算资源平台组,负责内部私有云平台的建设和架构规划设计. 曾任新浪动态应用平台系统架构师,负责微博.新浪博客等重点业务的内部私有云平台架构设计和运维管理工作. IO调度发生在Linux内核的IO调度层.这个层次是针对Linux的整体IO层次体系来说的.从read()或者write()系统调用的角度…
KVM 虚拟化原理探究(6)- 块设备IO虚拟化 标签(空格分隔): KVM [toc] 块设备IO虚拟化简介 上一篇文章讲到了网络IO虚拟化,作为另外一个重要的虚拟化资源,块设备IO的虚拟化也是同样非常重要的.同网络IO虚拟化类似,块设备IO也有全虚拟化和virtio的虚拟化方式(virtio-blk).现代块设备的工作模式都是基于DMA的方式,所以全虚拟化的方式和网络设备的方式接近,同样的virtio-blk的虚拟化方式和virtio-net的设计方式也是一样,只是在virtio backe…
目       录 1.      概述... 2 2.      平台演示... 2 3.      聚合和变化率计算... 2 4.      设备IO和通讯状态监测... 3 5.      组态建模快捷键... 3 6.      创建文件夹... 4 7.      选择应用图标... 4 1.   概述 iNeuOS 3.5版本主要应用于中核集团氚工厂关键工艺优化项目,没有对外发布.现在的iNeuOS 3.6版本是基于3.5版本功能基础发布. 主要更新内容包括: 1.数据流实时聚合和…
I/O完成端口原理见上一篇(可点击这里) 10.5.4.4 利用I/O完成端口实现Socket通信 (1)Accept和AcceptEx流程的比较 ①采用accept方式的流程示意图如下(普通的阻塞函数) ②采用AcceptEx方式的流程示意图如下(可工作在阻塞或非阻塞方式). [注意]:AcceptEx与Accept的不同 ①AcceptEx是在客户端连入之前,就把客户端的Socket建立好了.也就是说,AcceptEx是先建立的Socket,然后才发出的AcceptEx调用.即在进行客户端的…
1.适用于除Windows CE之外的各种Windows平台.在使用这个模型之前应该确保该系统安装了Winsock2.重叠模型的基本设计原理是使用一个重叠的数据结构,一次投递一个或多个Winsock I/O请求.在重叠模型中,收发数据使用WSA开头的函数. 2.WSA_FLAG_OVERLAPPED标志:要使用重叠模型.在创建套接字的时候,必须加上该标志.SOCKET s=WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,WSA_FLAG_OVERLAPPED);假如…
10.1 打开和关闭设备 10.1.1 设备的定义——在Windows中可以与之进行通信的任何东西. (1)常见设备及用途 设备 用途 用来打开设备的函数 文件 永久存储任何数据 CreateFile(pszName为路径名或UNC路径名) 目录 属性和文件压缩的设置 同上,如果指定FILE_FLAG_BACKUP_SEMANTICS标志,将打开一个目录.可以改变目录的属性(如正常或隐藏等)和他们的时间戳 逻辑磁盘驱动器 格式化驱动器 CreateFile(pszName为\\.\x:)其中的x…
磁盘驱动就是实现磁盘空间和内存空间数据上的交互,在上一篇中我们讨论了内存端的Page Segment Block Sector相关的概念,本文以3.14内核为例,讨论这部分内存是如何被组织管理的.我们知道,为了解决CPU和内存的速度不匹配,计算机系统引入了Cache缓存机制,这种硬件Cache的速度接近CPU内部寄存器的速度,可以提高系统效率,同样的思路也适用于解决内存和磁盘的速度不匹配问题,此外,磁盘多是机械式的,从寿命的角度考虑也不适合频繁读写,所以内核就将一部分内存作为缓存,提高磁盘访问速…
块设备是Linux三大设备之一,其驱动模型主要针对磁盘,Flash等存储类设备,块设备(blockdevice)是一种具有一定结构的随机存取设备,对这种设备的读写是按块(所以叫块设备)进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区.作为存储设备,块设备驱动的核心问题就是哪些page->segment->block->sector与哪些sector有数据交互,本文以3.14为蓝本,探讨内核中的块设备驱动模型. 框架 下图是Linux中的块…
2009年02月21日 星期六 下午 07:54 I/O设备处理必然让主程序停下来干等I/O的完成,对这个问题有 方法一:使用另一个线程进行I/O.这个方案可行,但是麻烦.                即 CreateThread(…………):创建一个子线程做其他事情.      Readfile(^…………):阻塞方式读数据. 方法二:使用overlapped I/O.overlapped I/O是WIN32的一项技术,你可以要求操作系统为你传送数据,并且在传送完毕时通知你.这项技术使你的程…
#!/usr/bin/env python # encoding: utf-8  # Date: 2018/6/19 # # from gevent import monkey  # 这俩行必须放在首行,下面就可以使用time(非gevent)的io# # monkey.patch_all()  # 相当于把所有的io操作打了标记,把io阻塞操作变成了非阻塞操作# # gevent遇到io都可以自动切换# import gevent# import time### def eat(name):#…
1 KQUEUE KeInitializeQueue VOID KeInitializeQueue( IN PKQUEUE  Queue, IN ULONG  Count  OPTIONAL ); lkd> dt _KQUEUE nt!_KQUEUE +0x000 Header           : _DISPATCHER_HEADER +0x010 EntryListHead    : _LIST_ENTRY +0x018 CurrentCount     : Uint4B +0x01c M…
一.代码部分 读: <?php /** * 异步文件系统仅限于4.3.0之前的版本 * 读取文件 */ $filename = dirname(__FILE__).DIRECTORY_SEPARATOR.'1.txt'; // 最后执行回调函数 // swoole_async_readfile最大可读取4M的文件,受限于SW_AIO_MAX_FILESIZE宏 // 使用 swoole_async_read() $result = swoole_async_readfile($filename,…
http://www.sysnote.org/2015/08/06/linux-io-stack/…
.NET中的 Overlapped 类 异步IO模型和Overlapped结构(http://blog.itpub.net/25897606/viewspace-705867/) 数据结构 OVERLAPPED结构主要用于异步I/O操作,其数据结构定义如下: typedef struct _OVERLAPPED {     DWORD Internal;     // 系统保留,存放系统设置的状态     DWORD InternalHigh; // 系统保留,存放被传输数据的长度     DW…
异步IO概念 Linux 异步 I/O (AIO)是 Linux 内核中提供的一个增强的功能.它是Linux 2.6 版本内核的一个标准特性,当然我们在2.4 版本内核的补丁中也可以找到它.AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成.稍后或在接收到 I/O 操作完成的通知时,进程就可以检索 I/O 操作的结果. Linux IO模型(I/O models)分同步IO模型(synchronous models)和异步IO模型(asynchronous mo…
开始准备看Java NIO的,这篇文章:http://xly1981.iteye.com/blog/1735862 里面提到了这篇文章 http://xmuzyq.iteye.com/blog/783218 同步.异步.阻塞.非阻塞.reactive.proactive等讲的不错. 在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式, 其中Reactor模式用于同步I/O, 而Proactor运用于异步I/O操作. 什么是同步和异步 同步和异步是针对应用程序和内核的…
一.概念相关介绍 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的network IO. 一 概念说明 在进行解释之前,首先要说明几个概念:- 用户空间和内核空间- 进程切换- 进程的阻塞- 文件描述符- 缓存 I/O 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系统的核心是内核,…
介绍 在谈及网络IO的时候总避不开阻塞.非阻塞.同步.异步.IO多路复用.select.poll.epoll等这几个词语.在面试的时候也会被经常问到这几个的区别.本文就来讲一下这几个词语的含义.区别以及使用方式.Unix网络编程一书中作者给出了五种IO模型:1.BlockingIO - 阻塞IO2.NoneBlockingIO - 非阻塞IO3.IO multiplexing - IO多路复用4.signal driven IO - 信号驱动IO5.asynchronous IO - 异步IO这…
第一篇初步了解串口的大致运作,接下来我们看基本操作 先看串口操作的数据结构: 串口操作有几个比较重要的Struct 1.Overlapped I/O 异步I/O模型 异步I/O和同步I/O不同,同步I/O时,程序被挂起,一直到I/O处理完,程序才能获得控制.异步I/O,调用一个函数告诉OS,进行I/O操作,不等I/O结束就立即返回,继续程序执行,操作系统完成I/O之后,通知消息给你.Overlapped I/O只是一种模型,它可以由内核对象(hand),事件内核对象(hEvent), 异步过程调…