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 小时前
Redis的Key和Value的设计原则有哪些?
数据库·redis·缓存
AI_56786 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
ccecw6 小时前
Mysql ONLY_FULL_GROUP_BY模式详解、group by非查询字段报错
数据库·mysql
JH30736 小时前
达梦数据库与MySQL的核心差异解析:从特性到实践
数据库·mysql
数据知道6 小时前
PostgreSQL 核心原理:如何利用多核 CPU 加速大数据量扫描(并行查询)
数据库·postgresql
麦聪聊数据8 小时前
Web 原生架构如何重塑企业级数据库协作流?
数据库·sql·低代码·架构
未来之窗软件服务8 小时前
数据库优化提速(四)新加坡房产系统开发数据库表结构—仙盟创梦IDE
数据库·数据库优化·计算机软考
Goat恶霸詹姆斯9 小时前
mysql常用语句
数据库·mysql·oracle
大模型玩家七七9 小时前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习
曾经的三心草9 小时前
redis-9-哨兵
数据库·redis·bootstrap