IO网络通信

IO

Bio:

   同步阻塞,一个线程一次连接,基于字符流/字节流

   

Nio:同步非阻塞

一个线程多个连接,多个请求注册到多路复用selector上,多路复用器轮训连接

   面向缓冲区, 从某通道读取数据到缓存区, 当前有则处理 无可处理其他工作

   线程向通道写入数据,一旦写入 不需要等待写完就可处理其他工作

元素
channel双向,可读写

   fileChannel文件读写,datagramChannel:udp数据包收发

   serverSocketChannel服务器tcp数据包收发,socketChannel客户端tcp数据包收发

buffer:可读写内存块

   channel读写文件或网络都要经过buffer

   byteBuffer类型化数据存取,支持byte char int long double做好类型匹配

   mappedByteBuffer可文件内容直接在堆外内存被修改

selector(监听多个channel事件)

   对应一个处理线程,注册多个channel,每个channel对应一个buffer

   

Aio:

   异步非阻塞,操作系统完成客户端间read/write,操作系统通知线程去处理后面的工作

零拷贝

直接io:

    磁盘 --> 内核缓冲区pageCache 4k --> 应用程序内存 ---> socket缓冲区 ---> 网络

内存映射文件技术:

    应用程序内存和内核缓冲区做了映射,数据直接从内核缓冲区到socke缓冲区再到网络

零拷贝:内核缓冲区和socket缓冲区做了地址映射

  底层网卡驱动程序读取数据并发送网络

ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);

TCP/IP

 点对点连接,封装传输数据帧 寻址 传输 路由 接收

七层ISO

数据链路层:mac地址表  做映射 

arp协议,同一子网内开始都不知道对方的ip,先广播arp请求,对方收到给出响应 本地更新arp表

在数据封装时,数据经过每个层都会打上该层特定标识,添加上头部

 窗口大小:流量控制 

校验和计算:数据包验证

一文讲透TCP/IP协议 | 图解+秒懂+史上最全-CSDN博客

socket

应用层与tcp/ip协议通信中间软件抽象层

https://blog.csdn.net/huanxiajioabu/article/details/131894903

三次握手建立连接:

半连队列hash表,全连队列链表

send发送数据 recv接收数据,不会马上执行,放到缓冲区 等内核 / 应用程序

  当应用程序recv没有数据,进入等待队列 进程休眠

nio

netty

   异步,基于事件驱动的网络应用框架;

设计优雅,可拓展 高性能 大吞吐量 零拷贝技术 安全传输 多主流协议 多种编码功能

原理

主从reactor多线程模式

channelHandler处理io交给下一个channelHandler处理,责任链

  读 解码 处理 编码 发送 

  ChannelInboundHandler ChannelOutboundHandler ChannelOutboundHandler

taskQueue:任务提交速度大于线程处理速度缓冲 / 异步处理selector监听io事件

45 张图深度解析 Netty 架构与原理-腾讯云开发者社区-腾讯云

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

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

相关文章

Android:adb命令

执行adb命令的窗口如下 Mac或Linux系统里的终端窗口; window系统运行输入cmd打开的指令窗口; Android Studio 里控制下面的Terminal窗口 1. 查看已链接的设备和模拟器 adb devices -l 2. 查看Android内核版本号 adb shell getprop ro.build.version.re…

数据结构和算法:哈希表

哈希表 哈希表(hash table),又称散列表,它通过建立键 key 与值 value 之间的映射,实现高效的元素查询。具体而言,向哈希表中输入一个键 key ,则可以在 𝑂(1) 时间内获取对应的值 va…

CSS样式表 样式优先级 选择器以及选择器的权重优先级

CSS组成 css由选择符和声明组成,声明又分为属性和属性值 属性必须放在花括号里面,属性与属性值必用冒号连接 每条声明用分号结束 当一个属性有多个属性值的时候,属性值与属性值部分先后顺序,用空格隔开 在书写样式过程中、空格、换…

C++ 设计模式:观察者模式

观察者模式是行为模式之一,它的一个对象的状态发生变化时能自动通知其它关联对象,自动刷新对象状态。 Qt中信号/槽函数机制就是观察者模式,信号只用进行函数声明,槽函数的参数要和信号的参数一致,这是因为编译器通过co…

软文营销塑造品牌形象,迅推客助力企业成功求发展

企业可以选择适合自身的新闻宣传方法。迅推客作为互联网整合营销机构,积极推动软文营销,助力企业塑造高端品牌形象。 1、新闻稿战略规划。 新闻宣传前要有明确的战略规划。在新闻稿的创作过程中,企业的需求与消费者的需求巧妙地融合在一起。…

JAVA学习-NIO.字符集和Charset

在Java NIO中,字符集(Character Set)用于将字符与字节之间进行编码和解码。Java NIO提供了Charset类来表示字符集,并且支持多种常用的字符集。 一、Java NIO中常用的字符集包括但不限于以下几种: 1. UTF-8&#xff1…

如何查看 MySQL 数据库中某张指定表的具体大小

显示表的数据和索引占用的空间总量,您可以执行以下查询。(即查看 MySQL 数据库中某张指定表的具体大小) SELECT table_name AS Table, ROUND(((data_length index_length) / 1024 / 1024), 2) AS Size (MB) FROM information_schema.TABLES WHERE ta…

室内3D模型选择指南:哪家更值得信赖?

如今室内设计的3D模型已经成为了一种重要的设计工具。它们能够帮助设计师们更好地向客户展示他们的设计想法,同时也让客户能够更直观地理解他们的需求。然而,面对市场上众多的室内3D模型网站,我们该如何选择呢? 室内3D模型选择指南&#xff…

【代码随想录算法训练营第二十九天 | LeetCode491.递增子序列、46.全排列、47.全排列 II】

代码随想录算法训练营第二十九天 | LeetCode491.递增子序列、46.全排列、47.全排列 II 一、491.递增子序列 解题代码C&#xff1a; class Solution { private:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& nums…

构建高效Web应用程序:深入理解与实践RESTful API

I. 引言 A. Web应用程序开发的演变 随着互联网的迅速发展&#xff0c;Web应用程序开发也经历了巨大的变革。从最初的静态页面到动态网页&#xff0c;再到如今的复杂Web应用程序&#xff0c;这一演变过程中&#xff0c;开发者们不断寻求更高效、更灵活的解决方案&#xff0c;以…

echarts系列:echarts增加loading

背景 最近在大屏项目研发时&#xff0c;存在多个echarts图表&#xff0c;有些接口获取数据较慢&#xff0c;需要加loading样式&#xff1b; 解决方案 翻阅api&#xff0c;找到showLoading可进行设置 参考&#xff1a; 加载动画效果 显示加载动画效果。可以在加载数据前手动…

shader学习记录——几何着色器

参考连接&#xff1a; 几何着色器基础知识 模型沙砾化 Shader "Custom/geomShader" {Properties{_MainTex("Texture", 2D) "white" {}_Speed("Speed", Float) 10_AccelerationValue("AccelerationValue", Float) 10}Sub…

文件操作:二进制文件(写/读)

以二进制的方式对文件进行读写操作其打开方式要指定为 ios::binary 二进制方式写文件主要利用流对象调用成员函数write 函数原型 &#xff1a; ostream& write(const char * buffer,int len); 参数解释&#xff1a;字符指针buffer指向内存中一段存储空间。len是读写的字…

C# 中 判断指定2条线是否相交、重合等功能

调用代码&#xff1a; var line1Start new System.Windows.Point(line4.Syjd_X_BasicGeometry, line4.Syjd_Y_BasicGeometry); var line1End new System.Windows.Point(line4.Xyjd_X_BasicGeometry, line4.Xyjd_Y_BasicGeometry); …

10个优秀的Github开源项目

1Panel 是一个现代化、开源的 Linux 服务器运维管理面板 EX-chatGPT-精准搜索工具 feishu-chatgpt-飞一般的工作体验工具 Knife4j-是一个集Swagger2 和 OpenAPI3为一体的增强解决方案 Kooder 是 Gitee 团队开发的一个代码搜索系统 mtbird 是一款低代码可视化页面生成器 S…

docker一键部署若依前后端分离版本

比如这里把文件放到/xin/docker/jiaoZ/的目录下&#xff0c;jar包和下面的配置文件都放在这个文件夹下。 注意要把jar端口改为你实际启动的&#xff0c;映射端口也可以改为你想要的。 这里的映射端口为&#xff1a;nginx监听80端口&#xff0c;jar在8620端口&#xff0c;mysq…

邮箱的正则表达式

一、 背景 项目中要给用户发送邮件&#xff0c;这时候需要校验用户输入的邮箱的有有效性&#xff0c;这肯定用正则呀。 虽然没有统一的邮箱账号格式&#xff0c;但是所有邮箱都符合“名称域名”的规律。对于名称和域名的字符限制&#xff0c;我们可以根据项目的情况定义一个&a…

Emotion Prompt-LLM能够理解并能通过情感刺激得以增强

Large Language Models Understand and Can be Enhanced by Emotional Stimuli 情感智能对我们的日常行为和互动产生了显著的影响。尽管大型语言模型&#xff08;LLMs&#xff09;被视为向人工通用智能迈进的一大步&#xff0c;在许多任务中表现出色&#xff0c;但目前尚不清楚…

matlab 条件数的倒数

目录 一、概述1、算法概述2、主要函数3、参考文献二、条件设置错误的矩阵的敏感度三、求解单位矩阵的条件四、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 1、算法概述

Java代码中忽略HTTPS请求中的证书

请注意&#xff0c;忽略证书验证存在安全风险&#xff0c;因为这使得您的应用程序容易受到中间人攻击。在生产环境中&#xff0c;请谨慎使用此方法&#xff0c;并确保您的应用程序的安全性。 import javax.net.ssl.*; import java.security.SecureRandom; import java.securit…