当前位置:首页 > Java程序 > 正文内容

java中的nio(你知道java吗)

abcsky887个月前 (10-29)Java程序99

今天给各位分享

首先,我们需要弄清楚几个概念:同步和异步,阻塞和非阻塞01同步和异步1. 同步进程触发 IO 操作的时候,必须亲自处理;比如你必须亲自去银行取钱2. 异步进程触发 IO 操作的时候,可以不亲自处理,它把操作委托给 OS 处理,委托的时候需要告知数据的地址和大小,然后自己去做别的事情,当 IO 操作结束后会得到通知;。

java中的nio(你知道java吗)

比如你把银行卡给我,让我帮你去银行取钱,你需要告诉我银行卡密码和取多少钱,我取完了之后把钱给你3. 总结自己干就是同步,别人干就是异步02阻塞和非阻塞1. 阻塞进程触发 IO 操作的时候,如果此时此时没办法读或者写,那么进程就一直等待,直到读写结束;。

比如你去银行 A网络推广计划书范文TM 取钱,前面有人在排队,那么就要一直等待,直到你取完钱;2. 非阻塞进程触发 IO 操作的时候,如果此时此时没办法读或者写,那么就先去做别的,等到有通知后,再继续读写;比如你去银行柜台取钱,人比较多,那就先领一个号,等着叫到号再去对应的窗口办理业务;这里稍微有些不太恰当的是,我们等待的过程中,还得听着叫号。

3. 总结我要等着不能做其他事就是阻塞,我不用等可以做其他事就是异步03BIO同步阻塞;一个请求过来,应用程序开了一个线程,等 IO 准备好,IO 操作也是自己干;采用 BIO 模型的服务端,由一个独立的 Acceptor 线程负责进行监听;在 while(true) 循环中调用 acc网络推广计划书范文ept() 方法,等待客户端的请求;。

一旦接收到请求,就可以建立套接字开始进行读写操作,这时候不再接收其他的请求,直到读写完成;为了让 BIO 能够同时处理多个请求,那么就需要使用多线程处理;当服务端接收到请求,就为客户端创建一个线程进行处理,处理完成后再做线程销毁;

不过因为一个请求就要启动一个线程,所以开销是比较大的,启动和销毁线程开销很大,而且每个线程都要占用内存,所以可以引入线程池,可以在一定程度上减少线程创建和销毁的开销;这也被叫做 伪异步 IO。

线程池维护着 N 个线程和一个消息队列;当有请求接入时,服务端将 Socket 作为参数传递到一个线程任务中进行处理;通过对线程池最大线程数网络推广计划书范文和消息队列大小进行控制,所以就算访问量高于服务端的承载能力,也不会因为服务端的资源耗尽而导致宕机;

这个模型在 请求量不高的时候,效率还是不错的,而且也不需要考虑限流的问题(控制线程池的最大线程数量)04NIO同步非阻塞;不用等待 IO 准备,准备好了会通知,不过 IO 操作还是要自己干;NIO 是一种多路复用机制,利用单线程轮询事件,Channel 来决定做什么,避免连接数多的时候,频繁进行线程切换导致性能问题(Select 阶段阻塞)。

听到这里,很多人可能已经懵了...什么是多路复用?Channel又是啥?Select 阶段到底是什么阶段?这里我用白话解释一下NIO是面向缓冲区的,可以将数据网络推广计划书范文读取到一个缓冲区,稍后进行处理NIO 有几个核心概念:。

1. Channel 和 Buffer Channel 可以理解成一个双向流,或者理解成一个通道,Buffer 就是缓存区,或者你就把它看做是一块内存空间,数据可以从 Channel 流进 Buffer ,也可以从 Buffer 流进 Channel 。

Channel 有很多种实现,比如:FileChannel 是从文件中读写数据,SocketChannel 通过 TCP 读写网络中的数据等等Buffer 也有多重类型,比如:ByteBuffer、CharBuffer、IntBuffer等等,光看他们的名字就知道他们代表了不同的数据类型。网络推广计划书范文

2. Selector我们可以把 Selector 看做是一个管理员,可以管理多个 Channel , Selector 能够知道到哪个 Channel 已经做好了读写的准备这样一个线程只要操作这个管理员就可以了,相当于一个线程可以管理多个 Channel;一旦监听到有准备好的 Channel,就可以进行相应的处理。

不过 Java 原生的 NIO 不好用,直到 Netty 的出现05AIO异步非阻塞;因为事情不是自己做,其实也没有阻塞一说(都是非阻塞);AIO 是在 NIO 的基础上,引入异步通道的概念;NIO 是采用轮询的方式,不停地询问数据是否准备好了,准备好了就处理;AIO 是向操作系统网络推广计划书范文注册 IO 监听,操作系统完成 IO 操作了之后,主动通知,触发响应的函数(自己不做,让操作系统来做)。

目前看,AIO 应该的还不是很广泛。

扫描二维码推送至手机访问。

版权声明:本文由海南拓宏网络科技工作室发布,如需转载请注明出处。

本文链接:http://www.4blc.com/post/767.html

分享给朋友:

“java中的nio(你知道java吗)” 的相关文章

西安艺术生文化课培训机构哪个好(西安艺考文化课培训学校机构排名)

本文分享给大家的是: 目前,一些艺术生还在进行专业课集训,但是有许多学生家长已经在给孩子咨询文化课补习的事情了,2023年西安市艺考文化课集训学校已经在招生了,西安艺考文化课集训学校怎么选呢?小编归纳总结了选择艺考培训机构的方法: 选择艺考培训机构方法一:通过安全靠谱的平台...

java面试过不了(java面试为什么这么难)

今天给各位分享 一个程序员的编程能力,总体来讲是解决问题的能力,但如果分类来讲的话主要分成两部分,一种是编程基础这种不受到什么外界行业因素的影响一部分属于项目经验这种是程序员找工作最主要的利器,有经验的程序员谈工资基础就是项目经验。 技术不错的Java程序员在面试上这种可能...

计算机科学与技术是什么专业干什么的(计算机科学与技术是学什么呢)

本篇文章给大家谈谈 计算机科学与技术也叫做CS专业,顾名思义,是学习计算机相关的科学原理和专业技术的一门学科那么它和其他计算机专业,如软件工程、网络工程、信息管理与系统专业等有什么不同呢?我自己也是计算机科学与技术专业的,所以我深有体会在踏入这个专业之前,大家的一些疑惑,下面我就为...

请不要说自己是 Java 程序员

本文分享给大家的是:  几年前 Reddit 上有个关于招聘的笑话: 面试官问:你用过 Python 或者 Django 吗? 答:我三周前去过动物园,这个算吗? 面试官:你被雇佣了 一周后,这位应聘者用 Django 给他们的产品写了一个在线论坛。   英文的玩笑,用中文...

java程序工程师资格证报考要多少(java程序员需要考证吗)

今天给各位分享 Java的应用可以说是无处不在,从桌面办公应用到网络数据库等应用,从PC到嵌入式移动平台,从Java小应用程序(Applet)到架构庞大的J2EE企业级解决方案,处处都有Java的身影,就连美国大型太空项目当中,也使用了Java来开发控制系统和相关软件。 用...

java培训班价格(java培训多少钱?)

今天给各位分享 如果是学费的话,一般都是在1w5到2w左右,正规的全程的面授班就是这个价格,比这学费更多的,不论是什么噱头估计都是专坑冤大头花钱,而比这钱少的,课程估计也是教不全的填鸭式教育,不如自己自学的程度,更没必要去。 我是在动力节点学的Java,开始的Java实验班...