首页 > 数据库 >redis自学(16)select

redis自学(16)select

时间:2024-03-12 11:12:29浏览次数:23  
标签:遍历 16 redis set fd Select 就绪 select

Select

select是Linux中最早的I/O多路复用实现方案:

 

 

nfds是FD遍历的一个上限,遍历到这个值的时候,就意味着不用再往后去遍历了。

fds_bits 是存储1024个比特位,代表1024个fd,这个数量是__d_mask四个字节共32个比特位乘以fds_bits的32长度得到的

Select的执行流程:

 

 

根据fd的整数值,把对应的比特位赋值为1

 

 

传递进内核空间,遍历,有就绪的就后续操作,没有就绪的就休眠

 

 

有就绪的或者休眠唤醒有就绪数据,就根据队对应的fd修改,就绪的还是1,未就绪的就删除或者标记为0

 

 

然后把结果拷贝回用户空间,然而并不知道到底哪个fd就绪了,就要遍历找到就绪的fd。

 

Select模式存在的问题:

  •  需要将整个fd_set从用户空间拷贝到内核空间,select结束还要再次拷贝回用户空间
  •  Select无法得知具体是哪个fd就绪,需要遍历整个fd_set
  •  fd_set监听的fd数量不能超过1024

标签:遍历,16,redis,set,fd,Select,就绪,select
From: https://www.cnblogs.com/bulesea/p/18067870

相关文章

  • Jackson Redisson反序列化问题
    异常信息com.fasterxml.jackson.databind.exc.MismatchedInputException:Cannotconstructinstanceof`java.util.concurrent.atomic.AtomicInteger`(althoughatleastoneCreatorexists):noint/Int-argumentconstructor/factorymethodtodeserializefromNumberva......
  • 洛谷题单指南-线性表-P2058 [NOIP2016 普及组] 海港
    原题链接:https://www.luogu.com.cn/problem/P2058题意解读:计算24小时时间窗口内不同国家的数量,是队列的典型应用。解题思路:本题需要用到两个关键的数据结构:队列、数组队列用来保存24小时内到达的船的时间,数组用来保存24小时内每个国家有多少人每到一只船,需要把时间放入队列,如......
  • redisson序列化采坑那些事儿
    前言如果对springcloud-gateway有了解的同学,应该会知道springcloud-gateway默认提供了一个基于内存的路由定义仓库。org.springframework.cloud.gateway.route.InMemoryRouteDefinitionRepository基于内存的好处,就是快,但是缺点就是网关重启路由就丢失了。为了方便管理网关路由......
  • Qt quint16 高低字节 quint8
    在C++中,将一个quint16(即无符号16位整数)拆分成高字节和低字节可以通过位运算来完成。quint16通常是通过Qt的数据类型quint16来表示的。以下是一个示例代码,演示如何将quint16拆分成高低字节:1#include<QtGlobal>2#include<iostream>34intmain(){5qu......
  • Redis稳定性之战:AOF日志支撑数据持久化
    ★Redis24篇集合1介绍AOF(AppendOnlyFile)持久化:以独立日志的方式存储了Redis服务器的顺序指令序列,并只记录对内存进行修改的指令。当Redis服务发生雪崩等故障时,可以重启服务并重新执行AOF文件中的指令达到恢复数据的目的。也就是说,通过重放(replay),来重新建立Redis当前实......
  • Redis安装之集群-哨兵模式(sentinel)模式
    官网说明:https://redis.io/docs/management/sentinel/一、背景Redis主从复制模型在一定程度上解决了读写分离、容灾恢复、数据备份、水平扩容支撑高并发的问题,但仍存在单点故障问题,即Mater宕机后,集群将无法提供写服务。二、方案原理主从复制的问题在于Mater宕机后,Slave......
  • base16编码和解码-支持中文
     这是一个base16编码/解码的方法。而且支持中文的编码和解码。 代码由chatgpt-3.5生成:#include<iostream>#include<string>conststd::stringbase16="0123456789ABCDEF";voidBase16Encode(conststd::string&data,std::string&out){for(unsigned......
  • php反序列化和redis未授权
    1、centos系统安装http,php,redis服务更新yum源httpphpredis2、使用redis未授权漏洞写入phpinfo3、配合gopher协议ssrf漏洞向服务器写入任意数据4、演示ssh免密码登录5、画图解释PHP反序列化漏洞的原理6、预习一下java反序列化漏洞,包括继承,重写等概念......
  • Redis安装之Redis7主从复制(replica)安装(Linux版)
    官网说明:https://redis.io/docs/management/replication/一.背景单机部署存在单点故障及数据丢失问题,为了实现读写分离容灾恢复数据备份水平扩容支撑高并发等功能,Redis可基于主从复制的特性搭建集群。二.方案原理2.1.读写分离Master主机负责写操作,Slave从机负......
  • k02_redis命令
    链接redis方式一:redis-cli-h192.168.88.129-p6379-aroot方式二:redis-cli-h192.168.88.129-p6379AUTHrootredis通用命令help@string 查看帮助keys* 查询所有keyMSETkvk1v1 批量插入exists 确定一个键是否存在常见常见命令信息help@s......