RPC框架原理(一)

news2024/11/17 5:34:17

RPC框架原理

  • 网络和IO的关系,IO(input和output)面向的是谁?
    • OSI 7层参考模型,TCP/IP协议
      • 为什么会出现一个会话层
      • 三次握手
      • socket
      • 心跳keep alive
      • 四次挥手
    • 网络IO(IO模型)
  • IO框架
    • 底层

学习顺序:从网络,到IO模型,到RPC
在这里插入图片描述
目前只涉及网络IO(与磁盘IO无关)

网络和IO的关系,IO(input和output)面向的是谁?

在这里插入图片描述

OSI 7层参考模型,TCP/IP协议

在这里插入图片描述
分层解耦是软件工程学特点,OSI7层模型被实现出来共通使用的是TCP/IP协议
在这里插入图片描述

为什么会出现一个会话层

逃离了底层内核里面连接的约束,不是同一个生命周期内的,会话层是比内核公共层次中更高的一个层次。
例子:用户持久化登陆,在浏览器上连接(登陆)一次某服务端,会话层中记住一个session,浏览器与服务端连接断开,在下一次重新连接的时候直接带上会话层中的session,无需重新认证(不需要重新走会话层重新构建)。
(ps:如果想让用户认证一次后永远不需要重新登陆,强调持久性,可以将session存到一个可靠性更高的地方,如redis)
在这里插入图片描述

三次握手

在这里插入图片描述
内核开辟一段空间(资源,即socket和queue)
因此
网路IO的读写是单机行为,是面向socket的queue(队列,即socket缓冲区)去读写

socket

套接字,插座
由客户端和服务端组成(客户端和服务端套在一起),形成的结果是四元组(全局唯一的)。(要是不唯一,数据包可能出现串扰)
四元组包括:客户端ip、port,服务端ip、port
在这里插入图片描述

心跳keep alive

在socket连接后,如何尽早感知对方下线(比如,挂掉),而不是在需要传数据时才发现。

内核开启心跳检查——属于健康检查级别
但是在内核中开辟的心跳,他的维度、层次(只检查tcp对应的socket是否连接);
想做服务的健康检查时,没有办法使用内核中的心跳检查。
kernel只能保证socket连接没问题,无法知道其上面的某一个服务(一个socket上面可能有多个服务)是否有问题。所以需要在applicate应用层也需要做心跳

心跳分为:

  • 内核TCP级的心跳
  • 应用层的心跳

在这里插入图片描述

长连接:生命周期较长,在三次握手和四次挥手之间,进行了多次数据传输,各种请求(复用了该连接)
短连接:生命周期短,只为了完成一个请求响应
无论长短连接,都可以开启keepalive

四次挥手

网络IO(IO模型)

网络IO是程序app和内核kernel之间的过程
程序在网络IO中无论是read还是write,其实都是要对内核中的队列Queue进行操作
在这里插入图片描述
IO模型:
BIO模型:当app读取(read)时,如果queue是空的,那么就没有返回值,这时候会进入一种阻塞状态blocking;如果有很多个连接,所以每一个连接对应一个线程,每个线程去阻塞自己对应线程去读取,直到有返文,对应线程才会动。需要的资源较多
NIO模型:无论有没有数据,read就一定会返回(所以可以使用一个线程处理多个连接) ,有弊端,如果一直没有收到消息,该线程一直在空跑(使用多路复用器解决)

在这里插入图片描述

多路复用器:多个连接就是多条路
多个连接作为参数传递给一个函数,这个函数会返回其中谁有数据的状态/事件
内核级的,减少read调用次数。
然后再去read,相比NIO的read精准有效不浪费。

同步/异步IO模型:
程序自己去read,都叫做同步IO模型;
异步IO模型

IO框架

在这里插入图片描述

IO模型是在内核kernel中实现的
内核可以完成对网卡向上一直到tcp,网络协议栈;可以向上支撑成千上万的程序

在这里插入图片描述
虚拟化:app->kernel(进程级)->kernel->CPU
容器化:app->kernel(协议栈放在kernel中)->CPU

底层

例如一个问题:有client端和server端,请问他们所选用的IO模型
client端可以使用BIO,server端使用NIO
因为一个client对应一个server,一个server可能与多个client连接

基本的计算机构成:一块CPU、内存、网卡、硬盘、键盘
在这里插入图片描述
程序是如何运行在计算机当中的
当按下电源,计算机中做的第一件事情(主板检测……先略过),从磁盘的引导分区里面拿到引导程序,再加载文件系统,识别文件系统后读取,内核是第一个进入内存的。
在这里插入图片描述

内核第一个加载进内存,然后是各种application程序

内核作用:可以向下管理所有硬件(统一管理);程序需要通过访问内核访问硬件
在这里插入图片描述

程序通过访问内核(内核中的函数)叫做——系统调用system call

但同时要考虑安全问题,使用空间划分进行安全隔离
在这里插入图片描述
在这里插入图片描述

CPU上的程序是如何切换的,才能理解从app切换到内核是如何实现的,才能理解如何完成系统调用

晶振给CPU一个信号,产生一个中断(时钟中断),内核中进程调度程序(函数),计算机中有很多表IDT(interrupt describe table)(中断描述表,0-255个信号,第二列是一个地址),CPU根据晶振信号找IDT表中地址,找到进程调度地址。
内核中有两个队列:running queue(可运行的进程)、blocking queue(阻塞的队列,等待事件,无法拿到CPU直接运行)
在这里插入图片描述

进程调度针对running queue中的进程,进程调度就是从running queue队列中选一个进程放入CPU执行

还有一个表GDT(描述内核空间在哪里)

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

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

相关文章

SpringCloud整合Seata简易使用(注册中心Nacos)

SpringCloud整合Seata解决分布式事务(注册中心Nacos) Seata下载与配置在Nacos中配置seata相关配置持久化为db时,需要提前在数据库中创建seata数据库,SpringCloud整合Seata服务GlobalTransactional注解使用 本案例是在windows中运行…

抢人!抢人!抢人! IT行业某岗位已经开始抢人了!

所谓抢滩鸿蒙,人才先行。鸿蒙系统火力全开后,抢人已成鸿蒙市场的主题词! 智联招聘数据显示,春节后首周,鸿蒙相关职位数同比增长163%,是去年同期的2.6倍,2023年9-12月鸿蒙相关职位数同比增速为3…

长文预警:自动驾驶の核燃料库!Tesla数据标注系统解析

长文预警:自动驾驶の核燃料库!Tesla数据标注系统解析 前言 本文整理自原文链接,写的非常好,给了博主很多启发,投原创是因为平台机制,希望能被更多人看到。 掐指一算,又到了该学习的时间&#…

【权威出版/投稿优惠】2024年机器视觉与自动化技术国际会议(MVAT 2024)

2024 International Conference on Machine Vision and Automation Technology 2024年机器视觉与自动化技术国际会议 【会议信息】 会议简称:MVAT 2024截稿时间:(以官网为准)大会地点:中国重庆会议官网:www.icmvat.co…

北京崇文门中医医院贾英才与行业共进——第二届海峡两岸中西医结合肾脏病学术大会

第二届海峡两岸中西医结合肾脏病学术大会授牌仪式于2024年6月7号在北京前门国医堂举行。 第二届海峡两岸中西医结合肾脏病学术大会的主要议程可能包括以下内容: 学术讲座:来自海峡两岸的专家学者发表演讲,分享肾脏病防治、透析技术等方面的研…

鸿蒙全栈开发-浅谈鸿蒙~线程模型

前言 如果你现在正巧在找工作,或者琢磨着换个职业跑道,鸿蒙开发绝对值得你考虑一下。 为啥?理由很简单: 市场需求大:鸿蒙生态还在持续扩张,应用开发、系统优化、技术支持等岗位需求旺盛,找工作…

【Text2SQL 论文】C3:使用 ChatGPT 实现 zero-shot Text2SQL

论文:C3: Zero-shot Text-to-SQL with ChatGPT ⭐⭐⭐⭐ arXiv:2307.07306,浙大 Code:C3SQL | GitHub 一、论文速读 使用 ChatGPT 来解决 Text2SQL 任务时,few-shots ICL 的 setting 需要输入大量的 tokens,这有点昂贵…

LabVIEW阀性能试验台测控系统

本项目开发的阀性能试验台测控系统是为满足国家和企业相关标准而设计的,主要用于汽车气压制动系统控制装置和调节装置等产品的综合性能测试。系统采用工控机控制,配置电器控制柜,实现运动控制、开关量控制及传感器信号采集,具备数…

计算机SCI期刊,中科院2区,IF=6.9,收稿范围非常广泛

一、期刊名称 Journal of King Saud University—Computer and Information Sciences 二、期刊简介概况 期刊类型:SCI 学科领域:计算机科学 影响因子:6.9 中科院分区:2区 三、期刊征稿范围 《沙特国王大学计算机与信息科学杂…

如何让tracert命令的显示信息显示*星号

tracert命令如果在中间某一个节点超时,只会在显示信息中标识此节点信息超时“ * * * ”,不影响整个tracert命令操作。 如上图所示,在DeviceA上执行tracert 10.1.2.2命令,缺省情况下,DeviceA上的显示信息为:…

吊车报警的工作原理和使用场景_鼎跃安全

在现代建筑施工过程中,经常使用大型机械设备,如挖掘机、吊车、打桩机等,这些设备在施工过程中发挥着越来越重要的作用;同时,这些设备的作业频繁进行作业,对于接触到高压电线的风险也随之增加。大型机械设备…

【Text2SQL 论文】MAC-SQL:多个 Agents 合作来解决 Text2SQL

论文:MAC-SQL: A Multi-Agent Collaborative Framework for Text-to-SQL ⭐⭐⭐⭐ arXiv:2312.11242, 北航 & Tencent Code: MAC-SQL | GitHub 文章目录 一、论文速读二、MAC-SQL2.1 Selector agent2.2 Decomposer agent2.3 Refiner agent 三、指令微调的 SQL-L…

企业费用标准如何制定?

在当前宏观经济环境和市场竞争日益激烈的背景下,国内很多企业的费用管理流程依旧面临诸多挑战。特别是制造业、零售业等人员众多的企业,如何通过制定精细化、自动化的企业费用标准来实现降本增效,已经成为企业财务流程优化的首要目标。 企业…

【Microelectronic Systems】期末速通

PART1 嵌入式系统概述与玩转mbed 1 嵌入式系统,微控制器,与ARM 1.1什么是嵌入式系统? 微处理器不仅仅存在于通用计算机中,也可以安置在一些不需要计算的设备内部,比如洗衣机,摄像机。微处理器常常可以控制…

k8s小型实验模拟

(1)Kubernetes 区域可采用 Kubeadm 方式进行安装。(5分) (2)要求在 Kubernetes 环境中,通过yaml文件的方式,创建2个Nginx Pod分别放置在两个不同的节点上,Pod使用hostPat…

Ubuntu 20.04安装CMake 3.22.6版本

Ubuntu 20.04通过apt安装的cmake版本是3.16.3,默认安装到/usr/bin/cmake路径。 $ cmake Command cmake not found, but can be installed with:sudo snap install cmake # version 3.29.3, or sudo apt install cmake # version 3.16.3-1ubuntu1.20.04.1See sna…

AI做的2024年高考数学试卷,答案对吗?

2024年高考数学考试已经结束,现在呈上数学真题及AI给出的解答。供各位看官欣赏。 总的来说,人工做题两小时,AI解答两分钟。 但是,AI做的答案是否正确,那就要各位看官来评判了! 注:试卷来源于…

MTK联发科MT6897(天玑8300)5G智能移动处理器规格参数

天玑 8300 采用台积电第二代 4nm 制程,基于 Armv9 CPU 架构,八核 CPU 包含 4 个 Cortex-A715 性能核心和 4 个 Cortex-A510 能效核心,CPU 峰值性能较上一代提升 20%,功耗节省 30%。 此外,天玑 8300 搭载 6 核 GPU Mal…

【Linux】Centos7升级内核的方法:yum更新(ELRepo)

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 🤓 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深…

【面试八股总结】内存页面置换算法

参考资料:小林coding、阿秀 缺页中断 在 CPU 里访问一条 Load M 指令,然后 CPU 会去找 M 所对应的页表项。如果该页表项的状态位是「有效的」,那 CPU 就可以直接去访问物理内存了,如果状态位是「无效的」,则 CPU 则会…