BIO、NIO变成与直接内存、零拷贝

news2024/12/26 10:38:47

一、网络通信

        1、什么是socket?


                Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层,它是一组接口,一般由操作
系统提供。客户端连接上一个服务端,就会在客户端中产生一个 socket 接口实例,服务端每接受
一个客户端连接,就会产生一个 socket 接口实例和客户端的 socket 进行通信,有多个客户
端连接自然就有多个 socket 接口实例。

        

2、网络编程中的serversocket与socket

在网络编程中,应用程序启动会使用serversocket监听端口,客户端通过ip与端口找到对应的应用程序;建立连接后应用程序会创建对应的socket读取客户端传输的数据,并通过socket写入数据后返回给客户端;

二、JDK中的BIO

        BIBIO中的SercerSocket负责绑定IP,启动监听端口,等待客户端链接;客户端的Socket累实例发起链接操作,serversocket接收后产生一个新的服务端socket负责与客户端实例通过输入流和输出流进行通信;

        阻塞体现:1、服务启动就绪,主线程一直等待客户端链接,主线程阻塞;

                          2、建立连接后,在读取socket信息之前,线程也是一直阻塞等待;

传统BIO模型

当客户端访问数量增加,线程与客户端访问数量1:1,服务端会创建大量线程,线程数量增加,系统性能急剧下降,过多会导致系统宕机;

为了改进这一问题,我们可以采用n个线程处理多个客户端请求,这一方式会导致多个客户端等待,这是最大的弊端;

三、什么是NIO?

NIO是为了弥补BIO的不足,提供了高速的、面向块的I/O。NIO全程NO-Blocking io;

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

1、阻塞与非阻塞IO

java IO的各种流是阻塞的,这意味着当一个线程调用read()或write时,该线程呗阻塞;

java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据牡丹石他仅能得到目前可用的数据,如果没有数据就什么都读取不到;而不是保持阻塞,所以直到数据变更前,可以做其它的事情,因此是非阻塞;

2、NIO之Reactor(反应器)模式

“反应”即“倒置”,“控制逆转”,具体事件处理程序不调用反应器,而向反应器注
册一个事件处理器,表示自己对某些事件感兴趣,有时间来了,具体事件处理程序通过事件
处理器对某个指定的事件发生做出反应;这种控制逆转又称为“好莱坞法则”(不要调用我,
让我来调用你)

3、NIO的三大组件

        Selector选择器、channel管道、buffer缓冲区;

Channels:管道,通道,应用程序与操作系统交互事件与传递内容的渠道(应用程序可以通过通道来读写数据);

        a、所有被Selector注册的通道,只能是继承了SelectableChannel类的子类;

        b、ServerSocketChannel:应用程序的监听的通道,只有通过这个通道,应用程序才能向操作系统注册支持多路复用IO的端口监听;        

        c、SocketChannel:TCP Socket套接字的监听通道,一个socket套接字对应了一个客户端IP:端口,服务端ip:端口;

Selector:java的NIO选择器允许一个单独的线程来监视多个输入通道,即多个通道可以使用一个选择器;这个单独的线程可以操作这个选择器选择通道;这种机制可以是的一个单独的线程很容易来管理多个通道;

应用程序回想selector注册需要它关注的channel,以及具体的channel会对那些IO事件感兴趣;

Buffer:缓冲区,用于和NIO通道进行交互,数据从通道读入缓冲区,从缓冲区写入通道中;(本质是一块可以写入数据,读取数据的内存);就是包装成了NIO Buffer对象,封装了该内存的访问方法;

(本文未更新完毕,持续更新中。。。。。)

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

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

相关文章

qt初入门7:进度条,定时器,时间控件练习

参考课本demo,空闲时间练习一下进度条,定时器,日期相关控件和使用。 1:demo运行结果 2:进度条控件梳理 进度条显示控件实际上是QProgressBar, 显示的进度可以通过代码控制,也可以通过其他控件上获取到的值…

Android SystemUI 介绍

目录 一、什么是SystemUI 二、SystemUI应用源码 三、学习 SystemUI 的核心组件 四、修改状态与导航栏测试 本篇文章,主要科普的是Android SystemUI , 下一篇文章我们将介绍如何把Android SystemUI 应用转成Android Studio 工程项目。 一、什么是Syst…

【K12】运用tk控件演示欧姆定律串联电阻小应用

上述代码是一个基于Python的图形用户界面(GUI)应用程序,用于演示欧姆定律。用户可以通过输入电阻值来计算电流,并在图形上显示结果。该程序使用了Tkinter库来创建GUI,matplotlib库来绘制图形,以及numpy库进…

使用git工具向GitHub远程仓库提交代码

注意更新仓库: 远程仓库更新方法: 本地仓库更新方法:在终端进入克隆的文件夹,依次执行如下指令: git config pull.rebase false //使用默认的合并策略 git pull //执行实际的拉取操作以下为常规操作&#xff…

【React教程】(3) React之表单、组件、事件处理详细代码示例

目录 事件处理示例1示例2示例3(this 绑定问题)示例4(传递参数)Class 和 Style 表单处理组件组件规则注意事项函数式组件(无状态)类方式组件(有状态)组件传值 Propsthis.props.childr…

bert提取词向量比较两文本相似度

使用 bert-base-chinese 预训练模型做词嵌入(文本转向量) 模型下载:bert预训练模型下载-CSDN博客 参考文章:使用bert提取词向量 下面这段代码是一个传入句子转为词向量的函数 from transformers import BertTokenizer, BertMod…

神经网络建立(结果可变)最小神经元

目录 介绍: 初始化: 建模: 预测: 改变结果: 介绍: 在深度学习中,神经元通常指的是人工神经元(或感知器),它是深度神经网络中的基本单元。深度学习的神经元模拟了生…

腾讯发表多模态大模型最新综述,从26个主流大模型看多模态效果提升关键方法

在大规模语言模型(LLMs)通往通用人工智能(AGI)的道路中,从传统的单一的“语言模态”扩展到“图像”、“语音”等等的“多模态”必然是大模型进化的必经之路。 在过去的 2023 年,多模态大规模语言模型&…

Java 与 JavaScript的区别

Java 与 JavaScript的区别 Java 与 JavaScript:概述Java的特点JavaScript 的起源JavaScript 的特点Java 与 JavaScript,哪个更好?JavaScript 与 Java 相似吗?Java 与 JavaScript 的区别JavaScript 在服务器端的运行方式是怎样的&a…

arco design table遇到的一些问题

问题1:不知情就成了树形table table中不知道为啥就多了个树形加号在前面,查找问题后发现,是后端返回的数据中有children,框架中默认对这个参数做了树形结构。 解决办法: 当时没找到取消或者修改字段的属性或方法&…

美赛违规被判作弊,注意这几种情况

每年都会有队伍被判为作弊或无效,无非就是买了思路、找了代做或不小心造成的。 下图是2023美赛评奖结果(MCM是前三题,ICM是后三题,去年疫情补办了春季赛),可以看到共1264个队被取消评奖资格(Di…

扩展学习|一文明晰推荐系统应用开发核心技术发展

文献来源:Lu J, Wu D, Mao M, et al. Recommender system application developments: a survey[J]. Decision support systems, 2015, 74: 12-32. 主题:关于推荐系统应用开发的调查研究 关键词:推荐系统、电子服务个性化、电子商务、电子学习、电子政务 …

STM32学习笔记一——初识STM32

目录 一、什么是ARM 二. Cortex 内核 三.什么是STM32 四.STM32核心板原理图: 五.STM32的内部结构: 六.stm32系统结构简化图 STM32基本原理分析: 七.典型型号——STM32F103ZET6 stm32——32位单片机(数据总线是32位的&am…

idea连接docker

idea 插件无法连接docker问题 原文:idea 插件无法连接docker问题 // 修改docker配置 vi /usr/lib/systemd/system/docker.service // 加上该段配置允许任何ip访问 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock // 重启docker即可 systemctl restart dock…

计算机网络·网络层

网络层 网络层提供的两种服务 争论: 网络层应该向运输层提供怎样的服务?面向连接还是无连接? 在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统? 2 种观点: 面向连接的可靠交付。 无连…

PaddleNLP的简单使用

1 介绍 PaddleNLP是一个基于PaddlePaddle深度学习平台的自然语言处理(NLP)工具库。 它提供了一系列用于文本处理、文本分类、情感分析、文本生成等任务的预训练模型、模型组件和工具函数。 PaddleNLP有统一的应用范式:通过 paddlenlp.Task…

Windows Server 2003 Web服务器搭建

系列文章目录 目录 系列文章目录 前言 一、Web服务器是什么? 二、配置服务器 1.实验环境搭建 2.服务器搭建 1)控制面板中找到增加或删除程序打开 2)点击增加程序 3)安装Web服务器 4)查看安装是否成功 5)打开Internet信息服务(IIS)管理器,进行配置 6)找…

Deepin基本环境查看(七)【任务管理器和进程管理】

Deepin基本环境查看 - 目录Deepin基本环境查看(一)【基本信息】Deepin基本环境查看(二)【内存】Deepin基本环境查看(三)【网络信息】Deepin基本环境查看(四)【硬盘/分区、文件系统、…

Sqli-labs-master第一关通关攻略

第一关基于错误的字符串/数字型注入 第一关打开,请输入id数值作为参数,那就输呗整个1,2,3看看效果 通过ID数值得变动,页面也随之发生变化,然后就是判断SQL语句是否拼接,是字符型还是数字型 输入…

C++ —— 智能指针

C —— 智能指针 文章目录 C —— 智能指针一、为什么需要使用智能指针?二、内存泄漏什么是内存泄漏?内存泄漏的危害?内存泄漏分类 三、智能指针的使用及原理1. RAII2. 智能指针的原理 三、智能指针的缺陷及其发展3.1 std::auto_ptr3.2 std::…