概念理解-异步IO
#include <aio.h> /*
函数名 :int aio_write(struct aiocb *aiocbp)
参 数 :struct aiocb *aiocbp
返回值 :执行成功返回0,出错返回-1,并设置errno的值
说 明 :请求对一个有效的文件描述符进行异步读操作,
这个文件描述符可以表示一个文件、套接字甚至管道
*/
int aio_write(struct aiocb *aiocbp); /*
函数名 :int aio_read(struct aiocb *aiocbp)
参 数 :struct aiocb *aiocbp
返回值 :执行成功返回0,出错返回-1,并设置errno的值
说 明 :请求对一个有效的文件描述符进行异步写操作,
这个文件描述符可以表示一个文件、套接字甚至管道
*/
int aio_read(struct aiocb *aiocbp); /*
函数名 :int aio_error(struct aiocb *aiocbp)
参 数 :struct aiocb *aiocbp
返回值 :EINPROGRESS:说明请求尚未完成
ECANCELLED:说明请求被应用程序取消
说 明 :被用来确定请求状态
*/
int aio_error(struct aiocb *aiocbp);
/*
函数名 :int aio_return(struct aiocb *aiocbp)
参 数 :struct aiocb *aiocbp
返回值 :
说 明 :1、异步I/O和标准I/O方式之间的另外一个区别是:不能立即访问这个函数的返回状态,
因为异步I/O并没有阻塞在read()调用上。
2、在标准的read调用中返回状态时:在该函数返回时提供的
3、但是在异步I/O中,我们要使用aio_return函数
*/
ssize_t aio_return(struct aiocb *aiocbp); /*
函数名 :int aio_suspend(const struct aiocb *const list[],int nent,const struct timespec *timeout);
参 数 :struct aiocb *aiocbp
返回值 :
说 明 :挂起调用进程直到IO完成或时间到期
用户可以使用aio_suspend()函数来挂起或阻塞掉用进程,直到异步请求完成为止,
此时产生一个信号,或者在发生其他超时操作时会导致aio_suspend()返回
*/
int aio_suspend(const struct aiocb *const list[],int nent,const struct timespec *timeout);
/*
函数名 :int aio_cancel(int fd,struct aiocb *aiocbp);
参 数 :struct aiocb *aiocbp
返回值 :
说 明 :允许用户取消对某个文件描述符执行的一个或所有的I.O请求
用户需要提供一个aiocb指针,如果这个请求被成功取消,
1、那么这个函数就会返回AIO_CANCELED,
2、如果请求完成,此函数就会返回AIO_TCANCELED
3、aiocbp参数设置为NULL,如果所有的请求都被取消了,这个函数将返回AIO_CANCELED,
4、如果至少有一个请求被取消,那么这个函数就会返回AIO_NOT_CANCELED
5、如果一个也没被取消就会返回AIO_ALLODNOE
*/
int aio_cancel(int fd,struct aiocb *aiocbp); /*
函数名 :int lio_listio(int mode,struct aiocb *restrict const list[restrict],int nent,struct sigevent *restrict notification);
参 数 :int mode -- mode参数可以是LIO_WAIT或LIO_NOWAIT
-- LIO_WAIT会阻塞这个调用,直到所有的I/O都完成为止
-- LIO_NOWAIT立即返回
参 数 :list -- aiocb的引用列表
参 数 :nent -- 最大元素个数
返回值 :正在进行IO操作返回EINPROGRESS
说 明 :
*/
int lio_listio(int mode,struct aiocb *restrict const list[restrict],int nent,struct sigevent *restrict notification);
struct aiocb{
int aio_filds; //要被读写的fd
off_t aio_offset; //读写操作对应的内存buffer
volatile void *aio_buf;//读写操作对应的文件偏移
size_t aio_nbytes; //需要读写的字节长度
int aio_reqprio; //请求的优先级
struct sigevent aio_sigevent; //异步事件,定义异步操作完成时的通知信号或回调函数
int aio_lio_opcode;
};
struct sigevent{
union sigval sigev_value;
int sigv_signo;
int sigev_notify;//异步事件的通知类型 SIGEV_NONE(不通知)、SIGEV_SIGNAL(生成信号)、SIGEV_THREAD(执行sigev_notify_function指定的函数)
void (*sigev_notify_function) (union sigval);
pthread_attr_t *sigev_notify_attrbutes;
概念理解-异步IO的更多相关文章
- Python(3)---从迭代器到异步IO
whenif 关注 2017.02.13 23:48* 字数 1750 阅读 250评论 0喜欢 8 目录 1. 迭代(iteration)与迭代器(iterator) 1.1 构建简单迭代器 1.2 ...
- 【译】深入理解python3.4中Asyncio库与Node.js的异步IO机制
转载自http://xidui.github.io/2015/10/29/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3python3-4-Asyncio%E5%BA%93% ...
- node中异步IO的理解
解释性语言和编译型语言的区别: 计算器不能直接的理解高级语言,只能理解机器语言,所以必须把高级语言翻译为机器语言,翻译的方式有两种,一个是编译,一个是解释. 解释性语言的程序不需要编译,它是在运行程序 ...
- 深入理解非阻塞同步IO和非阻塞异步IO
这两篇文章分析了Linux下的5种IO模型 http://blog.csdn.net/historyasamirror/article/details/5778378 http://blog.csdn ...
- 小白对异步IO的理解
前言 看到越来越多的大佬都在使用python的异步IO,协程等概念来实现高效的IO处理过程,可是我对这些概念还不太懂,就学习了一下. 因为是初学者,在理解上有很多不到位的地方,如果有错误,还希望能够有 ...
- C# 同步和异步(概念理解)
C# 同步和异步 IO 概念区分 四个相关概念: 同步(Synchronous) 异步( Asynchronous) 阻塞( Blocking ) 非阻塞( Nonblocking) 同步异步图解 ...
- 伪异步IO理解
伪异步IO实在堵塞IO的基础上将每个client发送过来的请求由新创建的线程来处理改进为用线程池来处理.因此避免了为每个client请求创建一个新线程造成的资源耗尽问题. 来看一下伪异步IO的服务端代 ...
- 异步IO的概念
同步IO是阻塞IO: 异步IO分为两种:1.主动查询是否有数据:2.被动监听是否有数据状态. https://www.cnblogs.com/euphie/p/6376508.html
- python IO模式(多路复用和异步IO深入理解)
1.事件渠道模型.事件渠道为异步IO的原型. 2.IO模式,一次IO调用会经历两个阶段.一.等待数据阶段,将数据从网络或者是磁盘读取到系统内核(kennel) 二.将数据从内核拷贝到进程中. 基于这两 ...
随机推荐
- scp建立安全信任关系
1. 在机器Client上root用户执行ssh-keygen命令,生成建立安全信任关系的证书. [root@Client root]# ssh-keygen -b 1024 -t rsa Gener ...
- [Spark] 05 - Spark SQL
关于Spark SQL,首先会想到一个问题:Apache Hive vs Apache Spark SQL – 13 Amazing Differences Hive has been known t ...
- linux添加默认网关
运维常用linux命令整理 1.临时添加 route add default gw 192.168.1.4 2.永久添加 vim /etc/sysconfig/network GATEWAY=192. ...
- 搭建大数据开发环境-Hadoop篇
前期准备 操作系统 hadoop目前对linux操作系统支持是最好的,可以部署2000个节点的服务器集群:在hadoop2.2以后,开始支持windows操作系统,但是兼容性没有linux好.因此,建 ...
- Python学习笔记整理总结【网络编程】【线程/进程/协程/IO多路模型/select/poll/epoll/selector】
一.socket(单链接) 1.socket:应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socke ...
- Gradle 梳理 - 插件
Gradle 教程:第二部分,JAVA PROJECTS[翻译] 原文地址:http://rominirani.com/2014/07/28/gradle-tutorial-part-2-java ...
- Java之字符流读写文件、文件的拷贝
字符流读数据 – 按单个字符读取 创建字符流读文件对象: Reader reader = new FileReader("readme.txt"); 调用方法读取数据: int d ...
- plsql导入导出表结构和数据对象
一.Tools的导出表结构:export User objects 二.Tools的Export Tables选项 导出表数据:export tables (选择:exp.exe) 三. 导入表结构: ...
- Golang:线程 和 协程 的区别
作者:林冠宏 / 指尖下的幽灵 博客:http://www.cnblogs.com/linguanh/ GitHub : https://github.com/af913337456/ 掘金:http ...
- redis常用笔记(第一版)
1.SINTER 说明:多key之间取交集数据 key1 = {a,b,c,d} key2 = {c} key3 = {a,c,e} SINTER key1 key2 key3 = {c} 2.sad ...