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

相关推荐
小马爱打代码6 分钟前
框架 - 组件 - 中间件:生产级参数配置指引
数据库·中间件
asdfg125896322 分钟前
一文通俗理解JDBC中的核心概念+案例
java·数据库·oracle·jdbc
点灯小铭30 分钟前
基于单片机与DAC0832的双路波形信号发生系统设计
数据库·单片机·mongodb·毕业设计·课程设计·期末大作业
小陈phd35 分钟前
Text2SQL智能体学习笔记(二)——NL2SQL落地的隐形基石:元数据库
数据库·笔记·学习
霸道流氓气质36 分钟前
阿里云 OSS 从零到实战:概念、配置与 Spring Boot 集成指南
数据库·spring boot·阿里云
茉莉玫瑰花茶37 分钟前
综合案例 - AI 智能租房助手 [ 4 ]
数据库·python·ai·langgraph
ULIi096kr39 分钟前
MySQL查看表创建时间、修改时间、最后更新时间(精准排查僵尸表)
数据库·mysql
折哥的程序人生 · 物流技术专研1 小时前
Tomcat 严重警告:JDBC 驱动未注销 + 工作线程泄漏 —— 原因、影响与彻底修复(生产级终极指南)
java·运维·数据库·mysql·oracle·tomcat
初圣魔门首席弟子1 小时前
Qt C++ 项目实战:修改共享头文件后的高效增量编译与快速发布流程
数据库
wb043072011 小时前
仓库搬家不停业——从阿明的“在线换仓库“,看数据库迁移与 Schema 演进的实战方法论
数据库·adb·架构