IO多路复用(epoll)/数据库(sqlite)

1.poll:

  1. poll使用链表管理文件描述符,对监测的文件描述符没有上限限制。

  2. 文件描述符集合在应用层创建,需要实现应用层和内核层的反复拷贝

  3. 需要应用层对集合表进行遍历,寻找到达的事件

  4. 只能工作在水平触发模式(低速模式),不能工作在边沿触发模式(高速模式)

2.epoll:

  1. epoll使用树形结构(红黑树)管理文件描述符,提高查找效率

  2. 文件描述符集合创建在内核。避免了应用层和内核层的数据拷贝

  3. 向应用层返回到达的IO事件的结合,不需要遍历查找

  4. 可以工作在水平触发模式(低速模式),也可以工作在边沿触发模式(高速模式)

epoll的操作流程:

  1. 创建文件描述符集合 : epoll_create();

  2. 将关注的文件描述符加入到集合:epoll_ctl()

  3. 等待IO事件到达 : epoll_wait();

  4. 根据不同的IO事件处理不同的任务

函数接口:

  1. int epoll_create(int size);

功能:创建并打开一个epoll的文件描述符结合

参数:

size:最多允许监测的文件描述符个数

返回值:

成功:返回代表集合的文件描述符

失败:-1

  1. int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

功能:对文件描述符集合进行操作

参数:

epfd:文件描述符集合

op:

EPOLL_CTL_ADD:向集合中添加

EPOLL_CTL_MOD:修改集合

EPOLL_CTL_DEL:从集合中删除

fd:要操作的文件描述符

event:事件的结构体

成功:0

失败:-1

typedef union epoll_data {

void *ptr;

int fd;

uint32_t u32;

uint64_t u64;

} epoll_data_t;

struct epoll_event {

uint32_t events; /* Epoll events */ //事件类型

epoll_data_t data; /* User data variable */

};

events:

EPOLLIN: 对文件描述符的读事件

EPOLLOUT:对文件描述符的写事件

data:

fd:操作的事件所对应的文件描述符

  1. int epoll_wait(int epfd, struct epoll_event *events,

int maxevents, int timeout);

功能:开始监测IO事件,并返回监测到的结果

参数:

epfd:监测的文件描述符集合

events:保存epoll_wait监测到的到达事件的结果

maxevents:最多监测的事件个数

timeout:超时时间

-1:不设置超时

返回值:

成功:返回到达的IO事件的个数

失败:-1

0:超时时间到达但没有IO事件

数据库: 数据保存在外存上;程序运行结束时,掉电数据不丢失;是一个专业的管理数据工具

sqlite3:(小型的数据库)

1.sqlite常用的命令:

.help 查询手册

.tables 查看数据库中的表

.headers on/off 打开/关闭表头

.mode column 设置左对齐

.quit 退出数据库

2.sqlite支持的SQL(结构化序列语言)语言

数据类型:

INTEGER : 整形

REAL:浮点型

TEXT:文本字符串类型

NULL :空

  1. 创建一张表

create table 表名(列名1 数据类型, 列名2 数据类型, ....);

  1. 插入表格

insert into 表名 values(值1, 值2, 值3, ...);

  1. 查询数据库中的表

查询表中的所有数据:

select * from 表名;

查找指定列:

select 列名1,列名2 from 表名;

条件查找:

select * from 表名 where 列名 关系运算符 值;

关系运算符:

=

>

<

!=

>=

<=

or (||)

and (&&)

模糊查找:

select * from 表名 where 列名 like "%梅";

% : 可以匹配多个字符

_ : 只能匹配一个字符

有序查找:

升序查找:

select * from 表名 order by 列名 ASC;

降序查找:

select * from 表名 order by 列名 DESC;

  1. 删除数据

delete from 表名 where 条件;

  1. 修改数据

update 表名 set 列名=新值,列名=新值 where 条件;

  1. 删除表

drop table 表名

相关推荐
.Eyes1 小时前
OceanBase 分区裁剪(Partition Pruning)原理解读
数据库·oceanbase
MrZhangBaby2 小时前
SQL-leetcode— 2356. 每位教师所教授的科目种类的数量
数据库
一水鉴天2 小时前
整体设计 之定稿 “凝聚式中心点”原型 --整除:智能合约和DBMS的在表层挂接 能/所 依据的深层套接 之2
数据库·人工智能·智能合约
翔云1234562 小时前
Python 中 SQLAlchemy 和 MySQLdb 的关系
数据库·python·mysql
孙霸天3 小时前
Ubuntu20系统上离线安装MongoDB
数据库·mongodb·ubuntu·备份还原
Java 码农3 小时前
nodejs mongodb基础
数据库·mongodb·node.js
TDengine (老段)3 小时前
TDengine IDMP 运维指南(4. 使用 Docker 部署)
运维·数据库·物联网·docker·时序数据库·tdengine·涛思数据
TDengine (老段)3 小时前
TDengine IDMP 最佳实践
大数据·数据库·物联网·ai·时序数据库·tdengine·涛思数据
彬彬醤4 小时前
Mac怎么连接VPS?可以参考这几种方法
大数据·运维·服务器·数据库·线性代数·macos·矩阵
废喵喵呜4 小时前
达梦数据库-实时主备集群部署详解(附图文)手工搭建一主一备数据守护集群DW
网络·数据库·tcp/ip