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:适合地理位置信息的计算
3
0
分享
操作
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
