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协议通信中间软件抽象层

import socket
 
# 创建一个套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 
# 指定本地地址和端口
server_address = ('localhost', 10000)
server_socket.bind(server_address)
 
# 监听客户端连接请求,最多同时连接5个客户端
server_socket.listen(5)
 
print('服务器正在等待客户端连接...')
 
# 进入无限循环,等待并处理客户端的请求
while True:
    # 接受客户端的连接请求
    client_socket, client_address = server_socket.accept()
    
    print(f'连接来自 {client_address}')
    
    # 接收客户端发送的数据
    received_data = client_socket.recv(1024)
    print('客户端发送的数据:', received_data.decode())
    
    # 发送数据给客户端
    client_socket.sendall(b'Hello, Client!')
    
    # 关闭与客户端的连接
    client_socket.close()
 
# 关闭服务器套接字
server_socket.close()

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 架构与原理-腾讯云开发者社区-腾讯云

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文献速递:基于SAM的医学图像分割---nnSAM:即插即用的分割任何东西模型 模型提升了nnUNet性能

Title 题目 nnSAM: Plug-and-play Segment Anything Model Improves nnUNet Performance nnSAM:即插即用的分割任何东西模型 模型提升了nnUNet性能 01 文献速递介绍 在现代临床工作流中,医学图像的高效准确分割对于疾病诊断和预后、治疗计划和监控以…

InnoDB 缓存

本文主要聊InnoDB内存结构, 先来看下官网Mysql 8.0 InnoDB架构图 MySQL :: MySQL 8.0 Reference Manual :: 17.4 InnoDB Architecture 如上图所示,InnoDB内存主要包含Buffer Pool, Change Buffer, Log Buffer, Adaptive Hash Index Buffer Pool 其实 buffer pool 就是内存中的…

网络安全协议基本问题

Http和Https协议的端口号: Http:80 Https:443 网络监听: 网络监听是一种监视网络状态、数据流程以及网络上信息传输的工具,它可以将网络界面设定成监听模式,并且可以截获网络上所传输的信息。但是网络监…

Linux:权限的概念与理解

目录 1. Linux权限的概念 2. Linux权限管理 01.文件访问者的分类 02.文件类型和访问权限 03.文件权限值的表示方法 04. 文件访问权限的相关设置方法 3. 使用 sudo分配权限 4. 目录的权限 ---------- 权限 用户角色(具体的人) 文件权限属性 ---------- 1. Linux权限的…

大英赛-选择题 (持续更新中)

解题策略: 十五分钟内写完,单选: ABCD全部单项选择题 考的语法点弄清不懂得话 看《张道真语法》 不会的单词建议下载墨墨背单词 直接把不会的加入到要背的里面 知识点 2019年初赛: 2019年决赛:

QT信号和槽机制connect用法

信号与槽机制是绝对不可或缺且常用的&#xff0c;其中的参数一般都会比较简单&#xff0c;bool、int、QString之类的&#xff0c;但当我们想要传递相对比较复杂的参数&#xff0c;例如QVector<int>、QList<QString>&#xff0c;以及一些我们自定义的结构体时&#…

白酒:蒸馏过程中香味成分的生成机制与调控技术

在豪迈白酒的酿造过程中&#xff0c;蒸馏是关键的步骤之一&#xff0c;它决定了白酒的香味成分和品质。云仓酒庄对蒸馏过程中香味成分的生成机制与调控技术进行了深入研究&#xff0c;以提高产品的风味和品质。 首先&#xff0c;蒸馏过程中香味成分的生成机制是一个复杂的过程。…

第四百一十八回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"自定义标题栏"相关的内容&#xff0c;本章回中将介绍自定义Action菜单.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里提到的…

图和树的路径问题

图 一&#xff1a;用vector存储无向图 数据结构 const int N 100; vector<int> G[N]; void addEdge(int u, int v){// 无向图G[u].push_back(v);G[v].push_back(u); } int m; // 点的个数创建图 void printList(){for (int i 0; i < m;i){cout << i<<…

NFT Insider #124:Aavegotchi 开启新一季稀有度挖矿,德克萨斯州奥斯汀市登陆 The Sandbox

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members&#xff08;https://twitter.com/WHALEMembers&#xff09;、BeepCrypto &#xff08;https://twitter.com/beep_crypto&#xff09;联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜、…

基于Gabor滤波器的指纹图像识别,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

Windows系统部署hMailServer邮件服务结合内网穿透实现公网收发邮件

文章目录 前言1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 前言 hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpola…

外包干了6天,技术退步明显。。。。

说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入上海某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&a…

【FFT实战篇】C++实现:利用快速傅里叶变换快速计算(多项式)乘法

本文使用C语言实现了快速傅里叶变换FFT并运用其进行多项式乘法计算&#xff0c;适合供学习过《数字信号处理》的读者学习使用FFT快速计算乘法。当然也可供对快速乘法感兴趣的没有系统学习过数字信号处理&#xff08;从CFT到DTFT到DFT&#xff09;的读者参考&#xff0c;提供一种…

如何真正改变自己? 《掌控习惯》

维持改变 1.心态 目标与体系&#xff0c;谁是真正通往成功的钥匙&#xff1f; 2.行动 习惯转变的3个层次 身份 你要成为谁&#xff1f; 你为成为他而幸福吗&#xff1f;过程结果 习惯的基本原理&#xff1a;要重视微小的改变 维持改变成两个方面入手 一、心态&#xff1a;忽略…

面向对象编程三大特征

基本介绍 面向对象编程有三大特征&#xff1a;封装、继承和多态。 1、封装介绍 2、继承介绍 3、多态介绍 向上转型与向下转型 多态常用案例 数值比较。

Oracle 写丢失保护/影子表空间(Lost Write Protection with Shadow Tablespace)

写丢失是Oracle数据库与独立I/O子系统交互时一种错误场景。假如Oracle发出的写磁盘命令&#xff0c;I/O子系统也返回成功写磁盘的消息&#xff08;但数据此时可能依然在I/O系统缓存中&#xff09;&#xff0c;如果在I/O系统实际写盘之前Oracle再次读取该数据&#xff0c;则I/O系…

机器人路径规划:基于红尾鹰算法(Red‑tailed hawk algorithm ,RTH)的机器人路径规划(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人&#xff08;Mobile robot&#xff0c;MR&#xff09;的路径规划是 移动机器人研究的重要分支之&#xff0c;是对其进行控制的基础。根据环境信息的已知程度不同&#xff0c;路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

软考中级 --网络工程师真题试卷 2023下半年

在EIGRP协议中&#xff0c;某个路由器收到了两条路径到达目标网络&#xff0c;路径1的带宽为100Mbps&#xff0c;延迟2ms&#xff0c;路径2的带宽为50Mbps&#xff0c;迟为4ms&#xff0c;如果EIGRP使用带宽和延迟的综合度量标准&#xff0c;那么该路由器选择的最佳路径是(D)。…

Vue.js+SpringBoot开发教学过程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 教师端2.2 学生端2.3 微信小程序端2.3.1 教师功能如下2.3.2 学生功能如下 三、系统展示 四、核心代码4.1 查询签到4.2 签到4.3 查询任务4.4 查询课程4.5 生成课程成绩 六、免责说明 一、摘要 1.1 项目介绍 基于JAVAVu…