Linux15-epoll、数据库

Reactor模型:

1.poll

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

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

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

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

2.epoll

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

        树型结构的特点:提高数据的查找效率,

                                     遍历时间复杂度为O(2logN)

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

3.直接向应用层返回到达的io事件的集合,不需要进行遍历查找

2.1操作流程:

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

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

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

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

int epoll_create(int size)
功能:创建并打开一个epoll的文件描述符集合

参数:

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

返回值:

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

失败:-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:事件的结构体,在op= EPOLL_CTL_ADD或者 EPOLL_CTL_MOD时使用,

 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:操作的事件对应的文件描述符

返回值:

成功:0

失败:-1

 int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);
功能:开始监测IO事件,并返回检测到的结果

参数:

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

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

maxevents:最多监测的事件个数

timeout:超过时间

返回值:

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

失败:-1

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

二、数据库

数据库文件与普通文件区别:
1.普通文件对数据管理(增删改查)效率低2.数据库对数据管理效率高,使用方便


常用数据库:
1.关系型数据库:
将复杂的数据结构简化为二维表格形式
大型:0racle、DB2
中型:MySq1、sQLServer

小型:Sqlite
2.非关系型数据库以键值对存储,且结构不固定。//JSON
Redis
MongoDB


嵌入式数据库:
sqlite3:
stu.db
1.开源免费,c语言开发
2.代码量少,1万行左右,总大小10M以内
3.文件型数据库,可以移动
4.数据容量最大2T

数据库:

数据存储:

变量、数组、链表-------------》内存 :程序运行结束、掉电数据丢失

文件 :                                        外存:程序运行结束、掉电数据不丢失

数据库:                                     外存:程序运行结束、掉电数据不丢失;专业的管理数据


sqlite3:

sqlite3 xxx.db
1.  sqlite的命令
     .help   查询手册
     .tables   查看数据库中的表
     .headers on/off  打开/关闭表头
     .mode column   设置左对齐
     .quit           退出数据库

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

      数据类型:
      INTEGER : 整形
      REAL:浮点型
      TEXT:文本字符串类型
      NULL :空

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

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

    3. 查询数据库中的表
        
        查询表中的所有数据:
        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;

    4. 删除数据
         delete from 表名 where 条件;
      
    5. 修改数据
        update 表名 set 列名=新值,列名=新值 where 条件;
       
    6.  删除表
        drop table 表名;


3. sqlite提供的C API接口


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值