狂feng
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
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP