IO模型和mySQL缓冲

ServletWebServerFactoryAutoConfiguration

SpringApplicationRunListener

EventPublishingRunListener ->通过 SimpleApplicationEventMulticaster 发布spring事件 ,持有List , 调用onApplicationEvent

new SpringApplication
-> setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));

run:
SpringApplicationRunListeners listeners = getRunListeners(args);
listeners.starting(); ->EventPublishingRunListener.starting()

IO模型

  • 同步:进程触发IO操作并等待,或者轮训去查询IO操作是否完成,等待结果,然后才能执行后续的操作;
  • 异步:触发IO操作后,直接返回,继续做后续的操作,IO交给内核来处理,完成后内核通知进程IO完成;
  • 阻塞:进程给CPU传达一个任务后,一直等待CPU处理完成,才继续执行后续操作;
  • 非阻塞:进程给CPU传达任务后,继续执行后续操作,隔段时间再来查询是否完成。
    同步和异步是针对于应用程序和内核的交互而言的,更加关注通知的方式,关注的是程序与内核的协作关系;
    阻塞和非阻塞更关注的是单个进程内部的执行状态,粒度更细,更微观,进程的阻塞是进程自身的一种主动行为。

阻塞IO:用户发起读,没数据准备好就阻塞在等待数据阶段

非阻塞IO:用户发起读操作,没准备好久立刻返回error,用户需要不断地主动询问数据准备好了没

**I/O多路复用:select,poll,epoll会不断轮询锁负责的所有socket,当某个socket有数据到达,就通知用户进程,特点是一个进程可以同时等待多个文件描述符

本质上都是同步IO,select,poll轮询,epoll:

  1. 监视的描述符数量不受限制
  2. 通过每个fd定义的回调函数来实现的
    如果没有大量的idle-connection,epoll并不会比select/poll高很多

异步IO: 用户发起读操作后立刻就去干其他事情,内核等待数据完成,将数据拷贝到用户内存,完成后通知用户

信号驱动I/O:“半异步”,非阻塞模式是应用不断发起read调用查询数据到了内核没有,而信号驱动把这个过程异步了,应用发起read调用时注册了一个信号处理函数,其实是个回调函数,数据到了内核后,内核触发这个回调函数,应用在回调函数里再发起一次read调用去读内核的数据。 所以是半异步。

mySQL 插入缓冲,双写缓冲

  • Insert Buffer:一般情况下由于聚集索引的有序性,不需要随机读取页中的数据,因为此类的顺序插入速度是非常快的。很多时候我们的表还会有很多非聚集索引,可非聚集索引插入的离散性导致了插入性能的下降 .Insert Buffer到底是个什么?就是用于提升非聚集索引页的插入性能的,其数据结构类似于数据页的一个B+树,物理存储在共享表空间ibdata1中 。
    Insert Buffer的使用要求:1.索引是非聚集索引,2.索引不是唯一(unique)的
  • Double write buffer:因为数据库使用的页(page,默认16KB)大小和操作系统对磁盘的操作页(page,默认4KB)不一样,当提交了一个页需要刷新到磁盘,会有
    多次IO, 此时刷了前面的8k时异常发生宕机。在系统恢复正常后,如果没有double write机制,此时数据库磁盘内的数据页已损坏,无法使用redo log进行恢复。
    如果有double write buffer,会检查double writer的数据的完整性,如果不完整直接丢弃double write buffer内容,重新执行那条redo log,如果double
    write buffer的数据是完整的,用double writer buffer的数据更新该数据页,跳过该redo log。
posted @   lunamu  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示