NIO的多路复用机制

本文探讨了Java NIO的多路复用机制,包括IO基础、堆外内存、磁盘IO工作机制、同步非阻塞NIO、异步AIO以及IO多路复用。特别强调了Redis中单线程利用IO多路复用提高性能的原因,并介绍了堆内内存和堆外内存的管理,以及直接IO和标准文件访问方式的区别。最后,详细解析了NIO多路复用的实现流程及其优势。
摘要由CSDN通过智能技术生成

在一次磁盘操作中,CPU不是瓶颈,瓶颈是内存和网络,IO操作,所以redis是通过在提高CPU的利用上,增加处理速率。

一般提高CPU的利用是通过多线程,一般线程数是cpu核数的2倍,但是redis是通过单线程实现的;一方面是因为多线程存在上下文切换(用户态和内核态的切换)消耗问题,另一方面是因为redis采用IO多路复用机制。

面试时,redis被问到了3次,每一次都是一个惨痛的教训,希望读者朋友们进行深度思考,不要让面试官一下就问倒,工作时的项目真的很锻炼人,一个安逸的环境对于我这种懒人就是温水煮青蛙。

下面就redis的多路复用机制,进行复盘总结!

首先说下IO基础

NIO堆外内存

很早的时候进行文件操作都是通过inputstream和outputstream,通过流的方式。
现在广泛用NIO,基于通道channel,通道是双向的,基于buffer,主要就是快,并非之前的流。

Buffer的类结构图:
在这里插入图片描述
HeapByteBuffer是堆内内存;
MappedByteBuffer和DirectByteBuff是基于堆外内存的;

堆内内存(on-heap memory) = 新生代+老年代+持久代
jvm参数中只要使用-Xms,-Xmx等参数

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值