day06 io

普通io和buffu io谁快
buffu快,为什么 因为少io
用户态和内核态切换的次数不一样,
普通io(每次io线程调用多)每次都申请操作系统,buffo:因为 jvm开了一个8kb的数组,超过写到 8kb才申请操作系统调用
在这里插入图片描述

应用层cpu和物理内存之间有一个页缓存,为了io
pcstat :pageCache(页缓存状态)4k
牵扯到io的话:页缓存更快,但存在断电数据丢失,和数据一致性问题
vim /etc/sysconfig.conf 前台和后台预估值 到90 把内存脏页写到磁盘(redis持久化和mysql biglog因为内核容易丢数据)
在这里插入图片描述
脏页要写磁盘,不脏页LRU
如果redis开启持久话缓存级别,可想而知要丢多少数据,它只要开启一个新的进程,原来的进程会被淘汰掉

在这里插入图片描述
nio:也是用buffer+cannl

在这里插入图片描述
淘汰(写入数据到pageecache把原有数据挤掉):内存达到90%预值把标记为dirty的数据刷到磁盘并去除dirty标记,去除后根据RLU,LFU算法把这些非ditry数据移出内存

只有文件才能mmap,其他流式操作是没有的
nio堆外的mmap
在这里插入图片描述
nio:
用法就是 new RandomAccessFile()
再建立管道 getChannel();方法
原理:基于mmap堆外内存映射,没有系统调用,没有用户态和内核态的切换(文件直接映射到内存,但数据还是会流入pagecache少了java进程参与)

普通buffo和NIO对比图:
在这里插入图片描述
比batyeBuffu性能稍高
NIO缺点:和其他IO一样也会产生淘汰和丢数据,因为它始终是基于pagecache页缓存。。
在这里插入图片描述
kafka 的log日志用的是mmap映射
netty:byteBuff中的on heap off heap
只要经过os没有数据可靠性,就会丢数据
为什么使用pagecache:减少硬件io调用,提速
在这里插入图片描述

主备,主从复制 kafka和es都有副本的概念

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值