NIO高并发基础

Wesley13
• 阅读 549

#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.因为利用缓冲区来存储数据,所以可以对缓冲区中的数据实现定点操作

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
Java NIO用法
一:NIO简介java.nio全称javanonblockingIO,是指jdk1.4及以上版本提供的新的api(NewIO非正式叫法),为所有的原始类型(boolean类型除外)提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络。JavaNIO由以下三个核心部分组成:Channels:通道B
Wesley13 Wesley13
2年前
JAVA中的BIO、NIO和AIO
Java中的IO方式主要分为3种:BIO(同步阻塞)、NIO(同步非阻塞)和AIO(异步非阻塞)。BIO同步阻塞模式。在JDK1.4以前,使用Java建立网络连接时,只能采用BIO方式,在服务器端启动一个ServerSocket,然后使用accept等待客户端请求,对于每一个请求,使用一个线程来进行处理用户请求。线程的大部分时间都在等待请求的
Wesley13 Wesley13
2年前
JAVA NIO non
Java自1.4以后,加入了新IO特性,NIO.号称newIO.NIO带来了nonblocking特性.这篇文章主要讲的是如何使用NIO的网络新特性,来构建高性能非阻塞并发服务器.文章基于个人理解,我也来搞搞NIO.,求指正.在NIO之前服务器还是在使用阻塞式的javasocket.以Tomcat最新版
Wesley13 Wesley13
2年前
Java NIO
简介引入NIO的原因1.因为BIO都是阻塞的IO,为了使Java能支持非阻塞I/O,JDK引入了NIO,可以将NIO理解成是NonblockI/O.(也有书说是newIO)2.BIO编程中,每当有一个新的客户端请求过来时,服务器端必须创建一个新的线程处理新接入的客户端链路,一个线程只能处理一个客户端连接,在并发量
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
NIO
1、简介1.1Java中的IO介绍1.BIO:BlockingIO,同步式阻塞式IO,即传统的IO,是java中最早期的流2.NIO:NonBlockingIO,又称NewIO,同步式非阻塞IO,是JDK1.4提供的流3.AIO:AsynchronousIO,异步是非阻塞IO,可以认为是NIO的二代版
Wesley13 Wesley13
2年前
NIO 非阻塞IO
NIO与IO的区别NIO特点:非阻塞,面向缓冲区IO特点:阻塞式,面向流阻塞与非阻塞javaio是阻塞式的,当一个线程调用read或者write方法后开始阻塞,直到读取到数据或者写入数据完成,该线程一直处于阻塞状态不能做其他事情。javanio通过选择器实现非阻塞式IO,通过一个专门的选
Stella981 Stella981
2年前
Netty学习之IO模型
目录1.1同步、异步、阻塞、非阻塞  同步VS异步    同步    异步  阻塞VS非阻塞    阻塞    非阻塞  举例    1)同步阻塞    2)同步非阻塞    3)异步阻塞    4)异步非阻塞1.2Li
Stella981 Stella981
2年前
ConcurrentLinkedQueue 介绍
在多线程编程环境下并发安全队列是不可或缺的一个重要工具类,为了实现并发安全可以有两种方式:一种是阻塞式的,例如:LinkedBlockingQueue;另一种即是我们将要探讨的非阻塞式,例如:ConcurrentLinkedQueue。相比较于阻塞式,非阻塞的最显著的优点就是性能,非阻塞式算法使用CAS来原子性的更新数据,避免了加锁的时间,同时也保证了数据的