NIO

简介: NIO

NIO

三大组件

Channel & Buffer

channel有点类似于stream,它是读写数据的双向通道,可以从channel将数据读入buffer,也可以将buffer的数据写入channel,而之间文件操作使用的stream要么是输入,要么是输出,channel比stream更为底层。

常见的Channel
  • FileChannel:用于操作文件
  • DatagramChannel:用于UDP协议
  • SocketChannel:用于TCP协议
  • ServerSocketChannel:用于TCP协议
常见的Buffer
  • ByteBuffer

    • MappedByteBuffer
    • DirectByteBuffer
    • HeapByteBuffer
  • ShortBuffer
  • IntBuffer
  • LongBuffer
  • FloatBuffer
  • DoubleBuffer
  • CharBuffer
Selector
传统多线程版服务器程序设计

23f182627d0d4c95b04a07f016b15802.png

服务器会为每个客户端创建新的线程与套接字进行会话

缺点
  • 内存占用高
  • 线程上下文切换成本高

    与cpu有直接关系,cpu线程数表示当前可并行的线程数量,唤醒状态的线程失去cpu时间片段后需要保存当前的线程执行信息(例如指令执行到哪一行等)

  • 只适合连接数少的场景
线程池版服务器程序设计

89048a3e9c124745b5e9dd9c435e39ac.png

客户端需要等待线程池有空闲线程时才能继续处理请求

缺点
  • 阻塞模式下,线程仅能处理一个socket连接
  • 仅适合短连接场景
Selector版服务器设计

selector的作用就是配合一个线程来管理多个channel,获取这些channel上发生的事件,这些channel工作在非阻塞模式下,不会让线程吊死在一个channel上。适合连接数特别多,但流量低的场景

e4a575abe07741ebb311c70a9f59c4f4.png

调用selector的select()方法会阻塞直到channel发生了读写就绪事件,这些事件发生,select方法就会返回这些事件交给thread来处理

相关文章
|
缓存 移动开发 JavaScript
跨桌面端Web容器演进
随着客户端技术的逐渐发展,Web容器已经深入客户端,为客户端构建了丰富多彩的页面和交互体验,成为客户端的一个不可或缺的重要组成部分。在千牛客户端上,Web容器不仅承载了千牛的开放容器(经历了H5插件到千牛小程序的变革),而且一些核心功能,比如聊天窗口,消息中心,也都是由Web容器承载的。
1011 0
跨桌面端Web容器演进
|
UED
【打造梦幻联动!】揭秘钉钉宜搭中的单选关联选项设置与图文展示的魔术 —— 让你的表单瞬间变身智能导游!
【8月更文挑战第7天】随着企业信息化的发展,办公自动化工具如钉钉宜搭成为提高效率的关键。宜搭是一款低代码平台,支持灵活的表单设计与流程管理。以旅行社报名表为例,介绍如何实现单选字段联动图文展示:用户选择目的地后自动显示相关信息。设计上,先创建单选和图文字段,再设置联动逻辑。通过简单的后台配置即可实现动态展示效果,提升用户体验与数据准确性。
475 0
ly~
|
12月前
|
数据可视化 BI API
除了 OpenGL,还有哪些常用的图形库可以在 C 语言中使用?
除了OpenGL,C语言中还有多个常用的图形库:SDL,适合初学者,用于2D游戏和多媒体应用;Allegro,高性能,支持2D/3D图形,广泛应用于游戏开发;Cairo,矢量图形库,支持高质量图形输出,适用于数据可视化;SFML,提供简单接口,用于2D/3D游戏及多媒体应用;GTK+,开源窗口工具包,用于创建图形用户界面。这些库各有特色,适用于不同的开发需求。
ly~
2597 4
|
弹性计算 大数据 测试技术
阿里云服务器2核4G3M配置带宽收费标准及优惠价格详解
阿里云服务器2核4G配置3M带宽的价格确实因实例规格的不同而有所差异。以共享标准型s6和高主频计算型hfc6为例,其价格分别为2152.20元/年和3121.20元/年。然而,通过阿里云的促销活动,用户有机会以更低的价格购买到这种配置的服务器。根据活动情况,2核4G3M带宽的阿里云服务器的价格可能在934.13元至3603.04元之间。
317 1
|
Web App开发
成功解决Chrome浏览器 控制台下看不到接口信息的问题
这篇文章提供了解决Chrome浏览器控制台不显示接口信息问题的方法,包括检查过滤设置和确保“保留日志”开关已打开。
成功解决Chrome浏览器 控制台下看不到接口信息的问题
|
机器学习/深度学习 算法 数据可视化
LightCLIP来啦 | 其实可以使用多级交互范式来训练轻量级CLIP模型
LightCLIP来啦 | 其实可以使用多级交互范式来训练轻量级CLIP模型
799 2
|
JavaScript 前端开发 数据安全/隐私保护
antdv入门安装教程
antdv入门安装教程
|
自然语言处理 机器人
chatGPT提示邮箱不支持的解决办法汇总!
一些用户在创建过程中遇到了提示“Oops! The email you provided is not supported”。中文的意思是“糟糕,邮箱不支持”。该如何解决呢?
2860 0
|
Ubuntu Linux
俄罗斯方块的变种——Bastet在Linux上的游戏体验
Bastet是一款受欢迎的俄罗斯方块变种游戏,它在Linux系统上以其高难度和令人上瘾的游戏性而备受欢迎。本文将介绍如何在Linux上安装、运行和玩Bastet,以及一些提高你游戏技巧的窍门。
909 0
|
机器学习/深度学习 传感器 算法
【无人机任务分配】基于合同网协议(CNP算法)实现多无人机具有时间窗口和优先级约束任务分配及跟踪问题附matlab代码
【无人机任务分配】基于合同网协议(CNP算法)实现多无人机具有时间窗口和优先级约束任务分配及跟踪问题附matlab代码