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 表名

相关推荐
Blossom i1 小时前
大数据预处理与采集实验一:使用Python操作MySQL数据库
数据库·mysql
雾时之林2 小时前
Linux--软件管理、源码包安装
linux·服务器·数据库
老纪的技术唠嗑局4 小时前
超级干货分享:中小企业使用 OceanBase 实践经验汇总
数据库
CLOUD ACE4 小时前
谷歌云代理|零售商Target 如何利用 Spanner Graph 提升零售发现体验并将数据库维护成本降低 50%
数据库·零售
AI大模型-小雄4 小时前
Codex写分页接口为什么越翻越慢?用Cursor Pagination解决重复与漏数据
大数据·数据库·elasticsearch·搜索引擎·chatgpt·后端开发·codex
少晓年5 小时前
从 MySQL 迁移到人大金仓 KingbaseES:完整指南与实践
数据库·mysql
SelectDB5 小时前
Apache Doris AI RAG 实战:从基础 RAG 到知识图谱增强的技术能力与选型
数据库
SelectDB6 小时前
电商企业 PostgreSQL 迁移 Apache Doris:80TB 分析数据统一平台技术能力与实践
数据库
SelectDB6 小时前
阶跃星辰 Agent 可观测:Apache Doris / SelectDB 的技术能力与实践
数据库
SelectDB6 小时前
ApacheDoris Iceberg V3 湖仓 DML:Apache Doris / SelectDB 的技术能力与实践
数据库