概念理解-异步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) 二.将数据从内核拷贝到进程中. 基于这两 ...
随机推荐
- 03.Django基础三之视图函数
一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错 ...
- [C++] 重载运算符与类型转换(1)
1.形式:返回值 operator符号(参数列表){} 2.不能被重载的运算符::: 作用域运算符 .* . 成员访问运算符 ?: 条件运算符:某些运算符(逗号,,取地址&, ...
- ReentrantLock API
java可重入锁,简单几个小案例,测试特性. 1.尝试锁 tryLock package com.cn.cfang.ReentrantLock; import java.util.concurren ...
- Hive之行转列与列转行
行转列 原始数据: 需求: 把星座和血型一样的人归类到一起.结果如下: 射手座,A 大海|凤姐 白羊座,A 孙悟空|猪八戒 白羊座,B 宋宋 实现: vi person_info.txt 孙悟空 白羊 ...
- 从壹开始 [Admin] 之五 ║ 实现『按钮』级别权限配置
一.前情回顾 哈喽大家好,在这个欢庆的日子里,老张祝大家工作都能蒸蒸日上!今天正好也是社团成立的第一天,我也是希望今天能是个纪念日,沾沾这个大喜庆! 放假这两天,倒是学到了很多东西,我这个也是承认的, ...
- java8 base64使用
java 1.8中引入了Base64,不在需要引入第三方库就可以使用base64了. 在需要用到base64进行加密解密的时候就可以使用了 String text = "base64 in ...
- thymeleaf 日期时间格式处理
一.#dates.format()用来格式化日期时间 ${#dates.format(date, 'dd/MMM/yyyy HH:mm')} ${#dates.arrayFormat(datesArr ...
- git 查看分支
1.查看本地分支 git branch 2.查看所有分支 git branch -a 2.查看所有分支及对应版本信息 git branch -va
- jquery 取得select选中的值
1.取得选中的值 jQuery("#select").val();是取得选中的值 2.取得的文本 jQuery("#select option:selected&quo ...
- CSS3相关编码规范
一.CSS书写顺序 1.位置属性(position, top, right, z-index, display, float等)2.大小(width, height, padding, margin) ...