BIO,NIO,AIO

BIO,NIO,AIO 介绍

  • 一、背景
    • 1.1 说明
    • 1.2 通信技术整体解决的问题
  • 二、Java的I/O演进之路
    • 2.1 I/O 模型基本说明
    • 2.2 I/O模型
        • Java BIO
        • Java NIO
        • Java AIO
    • 2.3 BIO、NIO、AIO 适用场景分析
  • 三、BIO,NIO,AIO总结

一、背景

1.1 说明

​ 在Java的软件设计开发中,通信架构是不可避免的,我们在进行不同系统或者不同进程之间的数据交互,或者在高并发下的通信场景下都需要用到网络通信相关的技术,对于一些经验丰富的程序员来说,Java早期的网络通信架构存在一些缺陷,其中最令人恼火的是基于性能低下的同步阻塞式的I/O通信(BIO),随着互联网开发下通信性能的高要求,Java在2002年开始支持了非阻塞式的I/O通信技术(NIO)。大多数读者在学习网络通信相关技术的时候,都只是接触到零碎的通信技术点,没有完整的技术体系架构,以至于对于Java的通信场景总是没有清晰的解决方案。本次课程将通过大量清晰直接的案例从最基础的BIO式通信开始介绍到NIO , AIO,读者可以清晰的了解到阻塞、同步、异步的现象、概念和特征以及优缺点。本课程结合了大量的案例让读者可以快速了解每种通信架构的使用。

1.2 通信技术整体解决的问题

  • 局域网内的通信要求。
  • 多系统间的底层消息传递机制。
  • 高并发下,大数据量的通信场景需要。
  • 游戏行业。无论是手游服务端,还是大型的网络游戏,Java语言都得到越来越广泛的应用。

二、Java的I/O演进之路

2.1 I/O 模型基本说明

I/O 模型:就是用什么样的通道或者说是通信模式和架构进行数据的传输和接收,很大程度上决定了程序通信的性能,Java 共支持 3 种网络编程的/IO 模型:BIO、NIO、AIO实际通信需求下,要根据不同的业务场景和性能需求决定选择不同的I/O模型

2.2 I/O模型

Java BIO

同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销。
详细介绍见
在这里插入图片描述

Java NIO

Java NIO : 同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有 I/O 请求就进行处理。
详细介绍见
在这里插入图片描述

Java AIO

Java AIO(NIO.2) : 异步 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,一般适用于连接数较
多且连接时间较长的应用
详细介绍见

2.3 BIO、NIO、AIO 适用场景分析

  1. BIO 方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中。
    JDK1.4以前的唯一选择,但程序简单易理解。
  2. NIO 方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,弹幕系统,服务器间通讯等。
    编程比较复杂,JDK1.4 开始支持。
  3. AIO 方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用 OS 参与并发操作,
    编程比较复杂,JDK7 开始支持。

三、BIO,NIO,AIO总结

BIO、NIO、AIO:

  • Java BIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
  • Java NIO : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
  • Java AIO(NIO.2) : 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。

BIO、NIO、AIO适用场景分析:

  • BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。
  • NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。
  • AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。Netty!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学PyTorch还是TensorFlow?

在机器学习领域,面对各类复杂多变的业务问题,构建灵活易调整的模型是高阶机器学习工程师必备的工作能力。然而,许多工程师还是有一个想法上的误区,以为只要掌握了一种深度学习的框架就能走遍天下了。事实上,在机器学习…

Bifrost微前端框架及其在美团闪购中的实践

Bifrost(英 [‘bi:frɔst])原意彩虹桥,北欧神话中是连通天地的一条通道。而在漫威电影《雷神》中,Bifrost是神域——阿斯加德(Asgard)的出入口,神域的人通过它自由穿梭于“九界”(指…

设计模式之观察者模式在Listview中的应用

有时候我们会有这么一个需求,在Listview的某个Item上有个按钮,点击这个按钮之后呢,需要对其它的item做一些操作,就像下面这个: 采纳按钮点击之前:采纳按钮点击之后: 简单介绍一下这两张图的意…

新书速递 | 《知识图谱:方法、实践与应用》

本文转载自公众号:博文视点Broadview 。互联网促成了大数据的集聚,大数据进而促进了人工智能算法的进步。近年来知识图谱作为AI领域底层技术被越来越多的人谈起。知识图谱的升温得益于新数据和新算法为规模化知识图谱构建提供了新的技术基础和发展条件&a…

Github Star过万的阿里学长独家干货分享

浅梦是我认识的一位浙大计算机系的学长,目前在阿里从事算法相关的工作。无论在学校还是工作中,他都保持着对新知识的学习和分享。他的github star 1w,世界排名700,参与开发的项目下载量接近30w次。主要涉及「推荐系统」&#xff0…

React Native在美团外卖客户端的实践

MRN简介 MRN(Meituan React Native) 是基于开源的React Native框架改造并完善而成的一套动态化方案,在开发体验上基本能与原生RN保持一致,同时从业务需求的角度满足从开发、构建、测试、部署、运维的工程化需要。解决了一系列痛点…

论文浅尝 | 使用预训练深度模型和迁移学习方法的端到端模糊实体匹配

论文笔记整理:高凤宁,南京大学硕士,研究方向为知识图谱、实体消解。链接:https://doi.org/10.1145/3308558.3313578动机目前实体匹配过程中实体之间的差异比较微妙,不同的情况下可能会有不同的决策结果,导致…

推荐几个Android开发非常有用的工具(for android studio)

原文地址: http://stormzhang.com/android/2015/05/26/android-tools/ 一晃好久没更新博客了,最近一个月真的很忙,因为公司在准备C轮融资,公司的发展到了一个关键的阶段,自己全部精力投入在公司产品上,这个状态可能还会…

分布式机器学习(下)-联邦学习

原文链接:https://zhuanlan.zhihu.com/p/114028503 本视频来源于Shusen Wang讲解的《分布式机器学习》,总共有三讲,内容和连接如下:并行计算与机器学习(上)并行计算与机器学习(下)联…

怎样将Embedding融入传统机器学习框架?

文 | 石塔西源 | 知乎LR本身是一个经典的CTR模型,广泛应用于推荐/广告系统。输入的特征大多数是离散型/组合型。那么对于Embedding技术,如何在不使用深度学习模型的情况下(假设就是不能用DNN),融入到LR框架中呢&#x…

推荐系统中的Embedding

推荐系统之Embedding一、什么是embedding?1. 让embedding空前流行的word2vec:2. 从word2vec到item2vec二、Graph Embedding1. 经典的Graph Embedding方法 — DeepWalk2. DeepWalk改进 — Node2vec3. 阿里的Graph Embedding方法EGES三、深度学习推荐系统中…

美团下一代服务治理系统 OCTO 2.0 的探索与实践

本文根据美团基础架构部服务治理团队工程师郭继东在2019 QCon(全球软件开发大会)上的演讲内容整理而成,主要阐述美团大规模治理体系结合 Service Mesh 演进的探索实践,希望对从事此领域的同学有所帮助。 一、OCTO 现状分析 OCTO 是…

技术动态 | 跨句多元关系抽取

本文转载自公众号&#xff1a;知识工场。第一部分 概述关系抽取简介关系抽取是从自由文本中获取实体间所具有的语义关系。这种语义关系常以三元组 <E1,R,E2> 的形式表达&#xff0c;其中&#xff0c;E1 和E2 表示实体&#xff0c;R 表示实体间所具有的语义关系。如图1所示…

网络解析(一):LeNet-5详解

原文链接&#xff1a;https://cuijiahua.com/blog/2018/01/dl_3.html 2018年1月9日21:03:313994,282 C摘要LeNet-5出自论文Gradient-Based Learning Applied to Document Recognition&#xff0c;是一种用于手写体字符识别的非常高效的卷积神经网络。一、前言LeNet-5出自论文Gr…

LeetCode 69. x 的平方根(二分查找)

文章目录1. 题目2.解题2.1 二分查找2.2 牛顿迭代1. 题目 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根&#xff0c;其中 x 是非负整数。 由于返回类型是整数&#xff0c;结果只保留整数的部分&#xff0c;小数部分将被舍去。 示例 1:输入: 4 输出: 2 示例 2:输入: 8…

Google综述:细数Transformer模型的17大高效变种

文 | 黄浴来源 | 知乎在NLP领域transformer已经是成功地取代了RNN&#xff08;LSTM/GRU&#xff09;&#xff0c;在CV领域也出现了应用&#xff0c;比如目标检测和图像加注&#xff0c;还有RL领域。这是一篇谷歌2020年9月份在arXiv发表的综述论文 “Efficient Transformers: A …

从ReentrantLock的实现看AQS的原理及应用

前言 Java中的大部分同步类&#xff08;Lock、Semaphore、ReentrantLock等&#xff09;都是基于AbstractQueuedSynchronizer&#xff08;简称为AQS&#xff09;实现的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。本文会从应用层逐渐深入到…

论文浅尝 | 利用知识-意识阅读器改进的不完整知识图谱问答方法

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生&#xff0c;研究方向为知识库问答。来源&#xff1a;ACL2019链接&#xff1a;https://www.aclweb.org/anthology/P19-1417/本文提出了一种融合不完整知识图谱与文档集信息的end2end问答模型&#xff0c;旨在利用结构…

MVP模式在Android中的应用(附UML高清大图,使用RecyclerView举例)

传了一张图&#xff0c;图比较大&#xff0c;请移步下载&#xff1a;http://download.csdn.net/detail/u011064099/9266245 在看代码之前&#xff0c;首先简单看一下什么是MVP模式&#xff1a;http://www.cnblogs.com/end/archive/2011/06/02/2068512.html MVP最核心就是将界面…

Facebook大公开:解决NLG模型落地难题!工业界的新一波春天?

文 | 小喂老师编 | 小轶作为NLP领域的“三高”用户&#xff08;高产、高能、高钞&#xff09;&#xff0c;FaceBook最近&#xff08;2020年11月&#xff09;又发表了一篇高水准文章&#xff0c;目前已被COLING-2020接收&#xff0c;号称解决了自然语言生成&#xff08;NLG&…