NIO高并发基础
NIO高并发
是jdk1.4出现的新的流.
NIO - New IO - 同步式非阻塞式IO
BIO - Blocking IO - 同步式阻塞式IO ---UDP/TCP
==AIO - AsynchronousIO - 异步式非阻塞IO - jdk1.8==
BIO的缺点
1.会产生阻塞行为 --- receive/accept/connect/read/write
2.一对一的连接:每连接一个客户端,在服务器端就要开启一个线程去处理请求.在客户端较多的情况下,服务器端就会产生大量的线程 - 耗费内存
3.建立连接之后如果不发生任何操作,那么就会导致服务器中的这个线程依然被占用,耗费服务器资源
4.无法实现定点操作
NIO組件
三个基本组件
-Buffer 缓冲区
-Channel 通道
-Selector 多路复用选择器
Buffer-缓冲区
容器 - 存储数据 - 在底层存储数据的时候实际上是以数组形式来存储的
capacity - 容量位 - 指定缓冲区的容量
limit - 限制位 - 限制操作位所能达到的尺度
position - 操作位 - 指定要操作的位置
mark - 标记位 - 标记位置,认为标记位置之前的数据是已经操作过的没有错误的数据
mark<=position<=limit<=capacity
flip - 反转缓冲区:先将限制位挪到操作位上,然后将操作位归0,清空标记位
clear - 清空缓冲区:将操作位归零,将limit挪到capacity,将标记位清空
reset - 重置缓冲区:将操作位挪到标记位
rewind - 重绕缓冲区:将操作位归零,将标记位清空 --- 缓冲区多次读取
Channel - 通道
传输数据,是面向缓冲区的.在java中,Channel默认也是阻塞的,需要手动将其设置为非阻塞模式
NIO:FileChannel UDP-DatagramChannel TCP-SocketChannel ServerSocketChannel
-FileChannel:操作文件,可以利用通道实现相同平台之间的零拷贝技术
Select - 多路复用选择器
进行选择 - 是面向通道进行操作.要求通道在使用的时候必须设置为非阻塞
-客户端:可连接 可读 可写
-服务端:可接受 可读 可写
通过Selector可以实现利用同一个服务器来处理多个客户端的数据---可以用少量的线程处理大量的请求 -- 在底层处理的时候实际上依然是同步的
NIO的优势
1.非阻塞:提高传输效率
2.一对多的连接:可以用一个或者少量的服务器中的线程来处理大量的请求,从而节省服务器的资源
3.即使已经建立连接,只要没有对应的读写事件,那么依然不能够使用服务器来处理
4.利用通道实现数据的双向传输
5.因为利用缓冲区来存储数据,所以可以对缓冲区中的数据实现定点操作
NIO高并发基础的更多相关文章
- JAVA的高并发基础认知 二
一.JAVA高级并发 1.5JDK之后引入高级并发特性,大多数的特性在java.util.concurrent 包中,是专门用于多线程发编程的,充分利用了现代多处理器和多核心系统的功能以编写大规模并发 ...
- JAVA的高并发基础认知 一
一.多线程的基本知识 1.1进程与线程的介绍 程序运行时在内存中分配自己独立的运行空间,就是进程 线程:它是位于进程中,负责当前进程中的某个具备独立运行资格的空间. 进程是负责整个程序的运行,而线程是 ...
- 《Netty Zookeeper Redis 高并发实战》 图书简介
<Netty Zookeeper Redis 高并发实战> 图书简介 本书为 高并发社群 -- 疯狂创客圈 倾力编著, 高度剖析底层原理,深度解读面试难题 疯狂创客圈 Java 高并发[ ...
- Springcloud 微服务 高并发(实战1):第1版秒杀
疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列之15 [博客园总入口 ] 前言 前言 疯狂创客圈(笔者尼恩创建的高并发研习社群)Springcloud 高并发系列文章,将为大家介绍三个版 ...
- 尼恩 Java高并发三部曲 [官方]
高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 + 社群大片好评 < Java 高并发 三部曲 > 面试必备 + 大厂必备 + 涨薪 ...
- 高吞吐高并发Java NIO服务的架构(NIO架构及应用之一)
高吞吐高并发Java NIO服务的架构(NIO架构及应用之一) http://maoyidao.iteye.com/blog/1149015 Java NIO成功的应用在了各种分布式.即时通信和中 ...
- Java异步NIO框架Netty实现高性能高并发
原文地址:http://blog.csdn.net/opengl_es/article/details/40979371?utm_source=tuicool&utm_medium=refer ...
- java的高并发IO原理,阻塞BIO同步非阻塞NIO,异步非阻塞AIO
原文地址: IO读写的基础原理 大家知道,用户程序进行IO的读写,依赖于底层的IO读写,基本上会用到底层的read&write两大系统调用.在不同的操作系统中,IO读写的系统调用的名称可能不完 ...
- PHP面试(二):程序设计、框架基础知识、算法与数据结构、高并发解决方案类
一.程序设计 1.设计功能系统——数据表设计.数据表创建语句.连接数据库的方式.编码能力 二.框架基础知识 1.MVC框架基本原理——原理.常见框架.单一入口的工作原理.模板引擎的理解 2.常见框架的 ...
随机推荐
- BZOJ4833: [Lydsy1704月赛]最小公倍佩尔数
Problem 传送门 Sol 容易得到 \[f_n=e_{n-1}+f_{n-1},e_{n-1}=f_{n-1}+e_{n-1},f_1=e_1=1\] 那么 \[f_n=2\times \sum ...
- 关于log4j知识
今天下午接触到log4j知识,花了几个小时,百度了一圈,总算是懂了一些. log4j的作用:log4j是一个日志输出的插件专门用来进行日志管理的,根据我的理解就是用来执行我们用来检测程序bug的Sys ...
- webform 使用log4net配置
效果: web.config配置 <configuration> <configSections> <!--log4net日志记录--> <section n ...
- 如何正确地在SOE中输出日志信息
ArcGIS for Server提供完善的日志管理机制,用于日志的记录.查询和自动清除.开发人员在开发编写SOE代码时,应该采用该机制进行日志记录的输出.如果不采用该机制,输出的日志消息会写到Arc ...
- ArcGISPlotSilverlightAPI For WPF
这两天有个需求,在地图上做标绘箭头,效果如下图. Arcgis for WPF 10.2.5.0版本,然而官方文档中没有这种API,自己去写一个呢,又感觉无从下手.无奈去网上搜索了一下,发现一篇好文: ...
- BottomNavigationView结合ViewPager
BottomNavigationView是Google推出的底部导航栏组件,在没有这些底部导航组件之前,Android开发者多使用的是RadioGroup,在上一个项目开发中我们使用了Google的B ...
- centos django+Nginx+uwsgi部署
第五天 部署python3+uwsgi+nginx的博客系统 ================================ mysql基本命令 mysql mysql -p mysqladmin ...
- vue知识点之day5
vuex是解决多层父子关系传值的问题,减少了传值的复杂度 vue+webpack安装图示
- 4.Bootstrap基础总结
一.Bootstrap 网格系统 二.Bootstrap 排版 三.Bootstrap 代码 四.Bootstrap 表格 五.Bootstrap 表单 六.Bootstrap 按钮 七.Bootst ...
- java笔记--代码实现汉诺塔移动过程和移动次数
汉诺塔 有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方. --如果朋友 ...