当前位置: 首页 > news >正文

java nio nio2 区别_BIO、NIO与NIO.2的区别与联系

BIO、NIO、NIO.2之间的区别主要是通过同步/异步、阻塞/非阻塞来进行区分的

同步:

程序与操作系统进行交互的时候采取的是问答的形式

异步:

程序与操作系统取得连接后,操作系统会主动通知程序消息

阻塞:

程序在执行一个操作的时候,在执行完毕前会一直等待

非阻塞:

程序在执行的时候,不会停止

举例:

对于Socket监听程序而言

BIO:同步阻塞

JDK1.4之前

不停地监听是否有新的连接,如果有新的连接,就使用流进行读写操作,在读写过程中程序是不能做其他事情的

对机器的性能要求较高

并发局限于应用

NIO:同步非阻塞

JDK1.4开始提供

不停地监听是否有新的连接,通过判断Socket是否为null来决定是否进行操作,只有Socket为null,才说明服务器收到了请求,但是这并不影响程序继续往下执行,如果程序想要在收到null的时候做其他事情,就可以继续往下执行。

适用于连接数目多,且连接操作时间较短的情况。如:聊天服务器。

并发局限于应用

NIO.2:异步非阻塞

JDK1.7开始提供

将事件与执行动作进行“绑定”,一旦产生了连接、读取等事件,系统会通知程序,程序收到通知后执行相关的操作

适用于连接数目多,且连接操作时间较长的情况。

并发过程中充分调用了OS

相关文章:

  • java 字节码分析_java字节码文件分析
  • java的反射注解_Java中的注解和反射
  • mfc将mysql查询结果取出_笔记-mysql 导出查询结果
  • mysql数据库中的各种约束_数据库Mysql的学习(三)-各种约束
  • java linux磁盘_java获取linux的磁盘空间,磁盘利用率
  • eclipse java转maven_关于在eclipse中使用Maven创建项目转换成javaweb步骤
  • uwp连接mysql数据库_[UWP小白日记-11]在UWP中使用Entity Framework Core(Entity Framework 7)操作SQLite数据库(一)...
  • centos apache php mysql zend_Centos6.5+php+apache+mysql+zendguardloader环境安装
  • java =1 ==1_为什么在Java中-1右移1 = -1?
  • java commons-pool_apache commons-pool的配置参数
  • JAVA CP936编码转utf8_Java编码转换 - querychinesesto的个人空间 - OSCHINA - 中文开源技术交流社区...
  • java hssffont_Java HSSFFont.setBoldweight方法代碼示例
  • java怎样创建字符串列表_java第三季lt;6-5gt;:生成随机字符串列表并排序之实现...
  • java多表return语句吗_java – 需要一个return语句吗? – 新编码
  • java网格布局如何为空_Java 网格布局
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【css3】浏览器内核及其兼容性
  • JAVA 学习IO流
  • Shell编程
  • Spring声明式事务管理之一:五大属性分析
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 使用 QuickBI 搭建酷炫可视化分析
  • 温故知新之javascript面向对象
  • 延迟脚本的方式
  • 一道面试题引发的“血案”
  • 因为阿里,他们成了“杭漂”
  • 仓管云——企业云erp功能有哪些?
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 说说我为什么看好Spring Cloud Alibaba
  • ​Spring Boot 分片上传文件
  • # 安徽锐锋科技IDMS系统简介
  • (超详细)语音信号处理之特征提取
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (四) 虚拟摄像头vivi体验
  • (一)Linux+Windows下安装ffmpeg
  • (转)EXC_BREAKPOINT僵尸错误
  • ******IT公司面试题汇总+优秀技术博客汇总
  • *2 echo、printf、mkdir命令的应用
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET 设计模式初探
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NetCore 如何动态路由
  • .net和jar包windows服务部署
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • /etc/sudoers (root权限管理)
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @media screen 针对不同移动设备
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @Transactional 详解
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [3D基础]理解计算机3D图形学中的坐标系变换
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [AutoSar]工程中的cpuload陷阱(三)测试
  • [boost]使用boost::function和boost::bind产生的down机一例