Java后端
·2025-04-17复习第九天
为什么网络 I/O 会被阻塞?
读:缓存区中没有数据
写:缓冲区中数据满了
accept 等待别人连接也需要时间
connect 三次握手需要阻塞
系统资源有限:无法创建新的连接
Select、Poll、Epoll 之间有什么区别?
Select和Poll
线程每次调用select或者poll的时候,将文件描述符数组拷贝给内核,内核遍历文件描述符,看看是否有事件完成,如果完成了则将修改后的文件描述符数据拷贝回用户空间,线程遍历数组获取改变的文件描述符进行处理
Select:文件描述符数量固定通常为1024个
Poll:文件描述符数量不固定
Epoll是对select、poll的改进
不需要再内核和用户空间中来回拷贝数组
epoll_create(),在内核中会维护一颗B+数
epoll_ctl(),向这颗B+数种注册文件描述符
epoll_wait(),每次有事件发生的时候,就将文件描述符添加到就绪链表中
线程只需要遍历就绪链表即可处理响应的事件。
I/O模型有哪些?
服务器发起IO请求(比如read读取内核中的数据),申请内核服务,内核从网卡中读取数据进行处理,然后将数据从内核写回到用户空间
同步阻塞IO:一直处于阻塞状态
同步非阻塞IO:只有将数据从内核拷贝回用户空间才需要阻塞
IO多路复用:可以处理多个IO请求(select、poll、epoll),本质上还是同步IO
信号驱动时IO:只有当数据准备好时,才通知服务器过来处理数据,用户不需要一直轮询
异步IO:服务器发起IO请求之后,一直到数据从内核拷贝回用户空间都不需要参与
如何处理 MySQL 的主从同步延迟?
首先主从延迟是一定会存在的
1、二次查询
2、关键查询走主库
3、写后立即查的走主库
4、使用缓存
减少主从查询?
从从库上入手
1、使用并行复制
2、硬件
3、物理距离
4、减少慢查询
5、从库不能太多
什么是 MySQL 的主从同步机制?它是如何实现的?
主节点将数据同步给从节点
主节点将数据写入binlog,将binlog传给从节点,等待一部分从节点的回复同步完成,然后在通知客户端,从节点将binlog日志转移到relay log中继日志中,然后据此进行回放操作。
同步复制:需要等待所有从节点同步完成才通知客户端
半同步复制:只需要部分从节点同步完成就通知客户端
异步复制:不需要从节点回复就通知可以端
并行复制:从节点使用并行的方式进行复制操作
库级别的:不同的数据库可以并行执行
组级别:同时处于prepare状态的事务可以并行执行
基于WriteSet的:串行的也能并行复制,通过ID进行哈希运算,判断是否可以并行执行
MySQL 中如何解决深度分页的问题?
1、记录上一次查询的最大ID
2、子查询
select * from table limit 10000000, 10
换成
select * from table where id > (select id from table order by id limit 1) limit 10
7
0
分享
操作
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
