概念理解-异步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) 二.将数据从内核拷贝到进程中. 基于这两 ...
随机推荐
- JS权威指南需要注意的知识点(1-6章)
客官快来看一看了,都给你浓缩好了,确定不进来搂一眼嘛,走过路过不要错过哟 in运算符 in运算符希望它的左操作数是一个字符串或可以转化为字符串,希望它的右操作数是一个对象,如果右侧的对象拥有一个名为左 ...
- 复习0824js
编程思想: 面向过程:凡事亲力亲为,所有事情的过程都要清楚,注重的是过程. 面向对象:提出需求,找到对象,对象解决这个问题,我们要结果,注重的是结果. 面向对象的特性:封装,继承,多态: JS: 是一 ...
- Vue学习之todolist组件拆分
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Vue学习之vue实例中的数据、事件和方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 品Spring:bean定义上梁山
认真阅读,收获满满,向智慧又迈进一步... 技术不枯燥,先来点闲聊 先说点好事高兴一下.前段时间看新闻说,我国正式的空间站建设已在进行当中.下半年,长征五号B运载火箭将在海南文昌航天发射场择机将空间站 ...
- 字符串的格式化、运算符和math函数(python中)
一.字符串的格式化 1.字符串格式化输出 print('%s的年龄是%d' % ('小哥哥',20)) # 将每个值放在⼀个圆括号内,逗号隔开 '{0}的年龄是{1}'.format('⼩小哥哥',2 ...
- Maven项目运行报错提示找不到加载主类
遇到这个问题花了几小时时间看网上的各种解决方法.试了几种都没用,最后用了这种本办法. 亲测第三条 https://blog.csdn.net/yuliantao/article/details/766 ...
- CDH 5.9.3 集群配置
-----------------------------------------集群规划------------------------------------------ hostname ip ...
- Spring Data JPA 梳理 - JPA是什么
总结: JPA是java的标准,不是Spring的标准 java标准中一般通过Meta-INF文件规范开发层面的事情,JPA也不例外,使用persistence.xml JPA定义了Entity 到 ...
- Save&Load--Unity存档读档的学习总结
存档与读档功能 举例: 传统RPG游戏(仙剑.空之轨迹): 1.角色信息(生命值,等级) 2.道具信息(装备,药品) 3.场景信息(场景名称.角色坐标) 4.事件信息(任务相关) 关卡类游戏:关卡的通 ...