首页 > 编程语言 >java NIO介绍

java NIO介绍

时间:2024-05-05 23:45:48浏览次数:25  
标签:调用 java NIO epoll 介绍 事件 接字 poll 连接

非阻塞网络调用可以使得我们可以不必等待一个操作的完成。

NIO选择器可以使得我们使用较少的线程监听许多连接上的事件,减少了内存管理和cpu上下文切换所带来的开销。

IO多路服用包括selector、poll、epoll、kqueue等

1、select

  使用数组保存poll中注册的事件,单个进程能够监听的套接字有最大数量限制,1024

  每次收集事件时,需要把全部连接的套接字传给操作系统(用户态到内核态的大量复制),而由操作系统寻找这些连接上是否有未处理的事件,会造成很大的资源浪费。

  它使用了事件通知API以确定在一组非阻塞套接字中有哪些已经就绪能够进行IO相关的操作。

  因为可以在任何的时间检查任意读写操作的完成状态,所以一个单一的线程便可以处理多个并发的连接。

2、poll

   使用数组保存poll中注册的事件,没有套接字限制,因为使用动态分配的数据结构来存储套接字。

  每次收集事件时,需要把全部连接的套接字传给操作系统(用户态到内核态的大量复制),而由操作系统寻找这些连接上是否有未处理的事件,会造成很大的资源浪费。

3、epoll

  使用红黑树存储所有添加到epoll中的事件

  使用双向链表保存将要通过epoll_wait返回给用户的、满足要求的事件

  epoll在linux内核中申请一个简易的文件系统,把原先的select或者poll调用分为三个部分:

  • 调用epoll_create创建一个epoll对象
  • 调用epoll_ctl向epoll对象中添加许多个连接的套接字
  • 调用epoll_wait收集发生事件的连接

 

标签:调用,java,NIO,epoll,介绍,事件,接字,poll,连接
From: https://www.cnblogs.com/use-D/p/18174054

相关文章

  • 第一章 Java基础语法
    1-1环境搭建+入门   ......
  • Java线程基础 - 线程状态
    线程状态转换新建(New)创建后尚未启动,也就是初始状态可运行(Runnable)可能正在运行,也可能正在等待CPU时间片。包含了操作系统线程状态中的Running和Ready。阻塞(Blocking)阻塞状态是指线程因为等待某个条件(通常是I/O操作、获取锁、等待某些资源或者其他同步机制)而暂......
  • 讯飞听见软件介绍
    讯飞听见是一款智能语音转文字软件,具有以下功能:•实时语音转文字:支持录音实时转文字,准确率较高,且能自动区分角色和分段。•实时翻译:提供8国语种随时互译。•边录边拍:可以在录音的同时拍照记录,方便重点标记。•悬浮字幕:支持在观看视频时实时显示悬浮字幕,提供无障碍观影体......
  • [java与https]第一篇、证书杂谈
    一、算法、密钥(对)、证书、证书库令狐冲是个马场老板,这天,他接到店里伙计电话,说有人已经签了租马合同,准备到马场提马,,他二话不说,突突突就去了,到了之后,发现不认识租客。令狐冲说,你把你租马合同给我看看,这就是证书。没成想这租客是个二道贩子,他呼啦一下掏出来一个装满租马合同的文件......
  • java面试-mybatis篇
    1.#{}和${}的区别是什么#{}是预编译处理,在mybatis处理#{}时,会将其转换为?,这种方式可以有效避免sql注入。${}是字符串替换,在mybatis处理${}时,会将其替换成变量的值。2.通常一个xml映射文件,都会有一个对应的dao接口。请问这个dao接口原理是什么,dao接口的方法参数不同时,支......
  • Jmeter内存溢出:java.lang.OutOfMemoryError: Java heap space解决思路
    一、问题原因用JMeter压测,有时候当模拟并发请求较大或者脚本运行时间较长时,JMeter会停止,报OOM(内存溢出)错误。原因是JMeter是一个纯Java开发的工具,内存由java虚拟机JVM管理,当内存回收不及时,堆内存不足时,就会报内存溢错误。概念补充:内存泄露:应用使用资源之后没有及时释放,导致应......
  • union 和union all 使用区别
    union和unionall把查询user表前5条数据查询user表数据从第7条数据开始,查询两条   通过union来把两个sql中的数据合并到一张表中,只查询出一条数据,会把重复的数据去掉 通过unionall查询出现出了两条数据,不会去重 ......
  • LLM2Vec介绍和将Llama 3转换为嵌入模型代码示例
    嵌入模型是大型语言模型检索增强生成(RAG)的关键组成部分。它们对知识库和用户编写的查询进行编码。使用与LLM相同领域的训练或微调的嵌入模型可以显著改进RAG系统。然而,寻找或训练这样的嵌入模型往往是一项困难的任务,因为领域内的数据通常是稀缺的。但是这篇论文LLM2Vec,可以将......
  • NVIDIA的Isaac AMR产品介绍
    NVIDIA的IsaacAMR是仓库自动运货机器人项目,说直白些就是一个AGV的小车,不过和传统的AGV不同,NVIDIA推出的这个产品是智能化的。传统AGV小车的运行代码都是写死的,直接把运行命令写到了AGV里面,然后这个小车就只能按照预先的设定来进行运行,但是NVIDIA的这个产品是智能化的,是可以根据实......
  • OpenSBI介绍,OpenSBI启动,及其和Linux交互
    基于OpenSBI1.2分析。 1OpenSBI介绍1.1RISC-V基础RISC-VCore支持三种Mode:UserMode、SupervisorMode、MachineMode:ABI:ApplicationBinaryInterface;SBI:SupervisorBinaryInterface;SEE:SupervisorExecutionEnvironment。如果支持虚拟化,还包括HypervisorMode:......