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

NIO

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

IONIO
面向流面向缓冲
阻塞IO非阻塞IO
选择器

 

 

 

 

1、面向流与面向缓冲

IO是面向流的,NIO是面向缓冲区的。 Java IO 每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。 Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。

2、阻塞与非阻塞IO

Java IO的各种流是阻塞的。当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。Java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取,而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。 非阻塞写也是如此。一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。 线程通常将非阻塞IO的空闲时间用于在其它通道上执行IO操作,所以一个单独的线程现在可以管理多个输入和输出通道(channel)。

3、选择器(Selectors)

     Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。

 

 

转载于:https://my.oschina.net/u/1862478/blog/1930758

相关文章:

  • 如果是你,你会怎样回答?
  • JQuery -- this 和 $(this) 的区别
  • 【原创】RabbitMQ 之 no_ack 分析
  • 解析XML文档大致流程以及相关方法
  • Tomcat日志分析
  • h5渲染性能一瞥
  • IIS7多域名绑定同一物理目录,设置不同默认文档的最佳解决方案
  • Hadoop分布式配置文件
  • Git 解决本地远端版本冲突
  • 使用Setup安装Windows8 RTM方法
  • Codeforces 101572 D - Distinctive Character
  • 中央政府释放重大利好 2015年信息消费将超3万亿
  • 在vue中使用SockJS实现webSocket通信
  • 虚度的日子们
  • Service 保活法之一
  • 4个实用的微服务测试策略
  • Android Studio:GIT提交项目到远程仓库
  • Angular4 模板式表单用法以及验证
  • CentOS 7 防火墙操作
  • git 常用命令
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • mysql innodb 索引使用指南
  • Python学习之路16-使用API
  • scala基础语法(二)
  • tab.js分享及浏览器兼容性问题汇总
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 对JS继承的一点思考
  • 分布式熔断降级平台aegis
  • 记一次用 NodeJs 实现模拟登录的思路
  • 前端面试题总结
  • 区块链技术特点之去中心化特性
  • 如何利用MongoDB打造TOP榜小程序
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 收藏好这篇,别再只说“数据劫持”了
  • 数组的操作
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​VRRP 虚拟路由冗余协议(华为)
  • (¥1011)-(一千零一拾一元整)输出
  • (16)Reactor的测试——响应式Spring的道法术器
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .axf 转化 .bin文件 的方法
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .Net Memory Profiler的使用举例
  • /etc/fstab 只读无法修改的解决办法
  • @ComponentScan比较
  • @PreAuthorize注解