狂feng
Java后端
·2025-04-18
复习第十天 为什么要有虚拟内存? 虚拟内存,实际看起来比实际内存多 虚拟内存由三大特性 虚拟性: 对换性: 多次性: 到底什么是 Reactor? 可以处理多个网络请求,基于同步非阻塞IO(NIO),由事件来驱动。 核心组件: 1、Reactor:反应器,将客户端的请求转发到对应的Acceptor(连接请求)和handler(具体的读写请求) 2、Acceptor:处理连接请求,为连接分配handler和向Acceptor注册该handler 3、Handler:处理具体的读写请求 单Reactor单线程:处理简单的业务 单Reactor多线程:处理中等复杂的连接请求 主从Reactor多线程:主Reactor复杂将连接请求发给Acceptor,将读写请求发给从Reactor。 什么是用户态和内核态? 用户态:权限低,无法直接操作硬件和执行特权指令,需要通过系统调用的方式,请求内核提供服务 内核态:权限高,可以直接操作硬件和执行特权指令(进程调度、内存管理),软件中断和硬件中断,从用户态到内核态需要进行上下文的切换 软中断:软件中断,请求系统服务(网络处理,文件读取),需要进入内核态,产生上下文切换 硬中断:硬件中断,如时钟、计时器、硬盘、网卡中断,每个硬件有一个中断向量,通过中断向量表找到对应的中断处理程序,需要上下文切换。 为什么 Redis 设计为单线程?6.0 版本为何引入多线程? 单线程、没有上下文的切换。 使用IO多路复用,单个线程可以监听多个客户端请求。 基于内存,内存的操作速度比磁盘要快很多1000倍。 引入多线程? Redis的性能瓶颈主要在网络IO这一块,IO多路复用本质上还是同步IO,将数据在用户空间和内核之间来回拷贝还是需要Redis线程参与,使用多线程的话能够有效减轻这一过程的负担。但具体的指令执行仍然是单线程的所以还是线程安全的。 Redis 为什么这么快? 单线程、没有上下文的切换。 使用IO多路复用,单个线程可以监听多个客户端请求。 基于内存,内存的操作速度比磁盘要快很多1000倍。 Redis 中常见的数据类型有哪些? String,底层简单动态字符串SDS,最大512MB,分布式事务、锁、对象、计数器 List,底层双向链表,消息队列(需要自行实现消息唯一ID和消费组的概念) Hash,底层哈希表,存储对象购物车场景 Set,底层哈希表,集合运算,,共同关注 ZSet,底层哈希表+跳表,排行榜 BitMap,位图,布隆过滤器 Stream,消息队列,实现了消息ID和消费组的概念 HyperLogLog,基数统计,基于概率统计一个集合中不重复元素的个数 GEO:适合地理位置信息的计算
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP