首页 > 其他分享 >NIO三大组件关系

NIO三大组件关系

时间:2024-07-27 15:57:18浏览次数:11  
标签:NIO Buffer Selector buffer 线程 三大 组件 Channel

Java NIO 同步非阻塞模式,通过Selector选择器 使一个线程从某通道(Channel已就绪准备好数据载体),让线程不会因为阻塞没事可做

通俗理解:NIO是可以做到用一个线程来处理多个操作的.假设有10000个请求过来,根据实际情况,可以分配50或者100个线程来处理.不像之前的阻塞IO那样,非得分配10000个线程

HTTP2.0使用了多路复用的技术,做到同一个线程并发处理多个请求,而且并发请求的数量比HTTP1.1打了好几个数量级.

IO是面向流处理的,NIO事实上是面向(缓冲区)Buffer块(区)处理的

数据是从 Channel 输出到 Buffer 中,或者从 Buffer 输入到 Channel 中。那么换句话说就是 数据从Channel 写入到Buffer,或者从Buffer读取到Channel  其实这句话是错误的

正确的说:

数据总是从通道读取到缓冲区,或者从缓冲区写入到通道

原因

ByteBuffer buffer = ByteBuffer.allocate(1024);

// 从 Channel 读取数据到 Buffer
int bytesRead = channel.read(buffer);

// 准备从 Buffer 读取数据
buffer.flip();

// 从 Buffer 写入数据到 Channel
int bytesWritten = channel.write(buffer);
 

NIO三大核心组件: Selector Channel Buffer

每个Channel都会对应一个Buffer

一个线程对应一个Selector,一个线程或者说一个Selector对应多个Channel

Channel需要注册到Selector

线程切换到哪个Channel是由事件决定的,Selectot会根据不同事件在各个Channel上选择,Event就是一个重要概念

Buffer就是一个内存块,底层是个数组

数据的读写是通过Buffer,注意flip()方法进行切换

Channel是双向的

读写数据都必须经过Buffer

Buffer 的双向数据传输角色

 虽然 Buffer 本身在同一时间内不是双向操作的,但它在数据传输过程中起到了双向的作用

标签:NIO,Buffer,Selector,buffer,线程,三大,组件,Channel
From: https://blog.csdn.net/tiantiantbtb/article/details/140734475

相关文章

  • 【微信小程序开发】API使用、自定义组件、页面实现图解超详细
    文章目录常用API消息交互消息加载转发给朋友模态对话框获取用户信息调起客户端扫码界面发起支付获取位置自定义组件创建自定义组件使用自定义组件组件生命周期组件所在页面的生命周期页面实现淘宝订单简化页面饮品订单简化页面本篇总结更多相关内容可查看常用......
  • 链路追踪和分析-Sleuth+Zipkin-微服务核心组件【分布式微服务笔记06】
    链路追踪和分析-Sleuth+Zipkin-微服务核心组件【分布式微服务笔记06】链路追踪和分析-Sleuth+Zipkin在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用,来协同产生最后的请求结果,每一个请求都会形成一条复杂的分布式服务调用链路链路中的任何......
  • 鸿蒙UI系统组件10——菜单(Menu)
    果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!扫描下面名片,关注公众号。Menu是菜单接口,一般用于鼠标右键弹窗、点击弹窗等。1、创建默认样式的菜单菜单需要调用bindMenu接口来实现。bindMenu响应绑定组件的点击事件,绑定组件后手势点击对应组件后即可弹出。Button('click......
  • [二、状态管理]4其他状态管理(3)$$语法:内置组件双向同步
    $$运算符为系统内置组件提供TS变量的引用,使得TS变量和系统内置组件的内部状态保持同步。内部状态具体指什么取决于组件。例如,Refresh组件的refreshing参数。使用规则当前$$支持基础类型变量,以及@State、@Link和@Prop装饰的变量。当前$$仅支持Refresh组件的refreshing参数。......
  • 2024-07-26 定义一个vue组件,并使用双向绑定该组件的值
    我写了一个input组件(vue3)<template><div><inputclass="inp":value="modelValue"@input="$emit('update:modelValue',$event.target.value)"/></div></template&......
  • 【KDE】【Plamsa】深入探索KDE Plasma桌面:组件精粹与个性化定制
    引言KDEPlasma桌面环境,作为Linux世界中的佼佼者,以其卓越的用户体验和深度定制能力赢得了广泛赞誉。本文将深入探讨KDEPlasma桌面的三大核心组件:窗口管理器、系统设置和应用程序启动器,揭示它们如何共同打造一个高效、个性化的工作环境。窗口管理器:你的视窗指挥官窗口管......
  • 组件保持存活/异步组件/依赖注入/Vue应用
    1.组件保持存活正常组件用按钮切换后被切换的组件会被销毁重建,而KeepAlive标签可以保持被切换的组件不被销毁例如:数据一被切换为新数据,切换组件后再切换回来还是新数据,若未用KeepAlive标签,切换组件后再切换回来还是数据一2.异步组件同步:有多个功能A/B/C时,功能运行是先运行A再......
  • 在K8S中,calico有哪些组件?都是做什么的?
    Calico是一个广泛使用的Kubernetes网络插件,它提供了一个高性能、可扩展的网络解决方案,用于连接和保护容器化的应用。Calico支持多种网络模型,包括BGP(BorderGatewayProtocol)和eBPF(ExtendedBerkeleyPacketFilter)技术,使其成为企业级应用的理想选择之一。以下是Cal......
  • Java NIO框架Netty教程(四)- ChannelBuffer
    在字符串消息收发中提到。ChannelBuffer是Netty中非常重要的概念。所有消息的收发都依赖于这个Buffer。我们通过Netty的官方的文档来了解一下,基于流的消息传递机制。Inastream-basedtransportsuchasTCP/IP,receiveddataisstoredintoasocketreceivebuffer.Unf......
  • Java NIO框架Netty教程(六)-Java NIO Selector模式
    全文详见个人独立博客:JavaNIO框架Netty教程(六)-JavaNIOSelector模式JavaNIO框架Netty教程(六)-JavaNIOSelector模式看到标题,您可能觉得,这跟Netty有什么关系呢?确实,如果你完全是使用Netty的,那么可能你可以完全不需要了解Selector。但是,不得不提的是,Netty底层关于NIO的实......