首页 > 其他分享 >《RPC实战与核心原理》学习笔记Day3

《RPC实战与核心原理》学习笔记Day3

时间:2023-01-20 07:55:05浏览次数:44  
标签:调用 Day3 笔记 RPC 内核 IO 进程 拷贝

04 | 网络通信:RPC框架在网络通信上更倾向于哪种网络IO模型?

网络通信在RPC调用中有什么作用?

RPC是解决进程间通信的一种方式,一次RPC调用,本质就是服务消费者与服务提供者之间的一次网络信息交换的过程。服务调用者通过网络IO发送一条请求消息,服务提供者接收并解析,处理完相关的业务逻辑之后,再发送一条响应消息给服务调用者,服务调用者接收并解析响应消息,处理完相关的响应逻辑,一次RPC调用便结束了。我们可以说,网络通信是整个RPC调用流程的基础。

有哪些常见的网络IO模型?

常见的网络IO模型分为四种:同步阻塞IO(BIO)、同步非阻塞IO(NIO)、IO多路复用和异步非阻塞IO(AIO)。其中AIO是异步IO,其他三种都是同步IO。
最常用的IO模型是同步阻塞IO和IO多路复用。

阻塞IO的工作流程是怎样的?

应用进程发起IO系统调用后,应用进程被阻塞,转到内核空间处理。内核开始等待数据,等待到数据之后,再将内核中的数据拷贝到用户内存中,整个IO处理完毕后返回进程。最后应用进程解除阻塞状态,运行业务逻辑。
系统内核在处理IO操作时,主要分为两个阶段:等待数据和拷贝数据。在此期间,应用进程中进行IO操作的线程一直会处于阻塞状态。

什么是IO多路复用?

多路就是指多个通道,也就是多个网络连接的IO,复用指多个通道复用在一个复用器上。
多个网络连接的IO可以注册到一个复用器(select)上,当用户进程调用了select,整个进程会被阻塞,同时,内核会监视所有socket负责的socket,当任何一个socket中的数据准备好了,select就会返回。这时用户进程再调用read操作,将数据从内核中拷贝到用户进程。
IO多路复用的优势在于用户可以在一个线程内同时处理多个socket的IO请求,用户可以注册多个socket,然后不断地调用select读取被激活的socket,这样可以达到在同一个线程内同时处理多个IO请求的目的。

有哪些常见的框架或者工具会使用IO多路复用?

Java中的NIO、Redis、Nginx、Reactor模式等。

在高性能的网络编程框架的编写上,大多数都是基于Reactor模式做的,其中的典型就是Java的Netty框架。

RPC调用在大多数情况下,是一个高并发调用的场景,考虑到系统内核的支持、编程语言的支持以及IO模型本身的特点,在RPC框架的实现中,我们选择IO多路复用作为网络通信采用的IO模型。

什么是“零拷贝”?

在没有零拷贝之前,应用进程的每一次写操作,都会把数据写到用户空间的缓冲区内,再由CPU讲数据拷贝到系统内核的缓冲区中,之后再由DMA将这份数据拷贝到网卡中,最后由网卡发送出去,这样一次写操作数据需要拷贝两次,而数据读操作也是类似的流程。

应用进程的一次完整的写操作,都需要在用户空间和内核空间中来回拷贝,并且每一次拷贝,都需要CPU进行一次上下文切换。

网络数据读写操作示意图如下。
4-网络读写数据流程.png

所谓零拷贝,就是取消用户空间与内核空间之间的数据拷贝操作,应用进程每一次的读写操作,都可以通过一种方式,让应用进程向用户空间写入或者读取数据,就如同直接向内核空间写入或者读取数据一样,之后再通过DMA将内核中的数据拷贝到网卡,或者将网卡中的数据拷贝到内核。

零拷贝的示意图如下。
4-零拷贝.png

零拷贝有哪些实现方式?

零拷贝有两种方式:

  1. mmmap+write
  2. sendfile

这一讲对于IO多路复用以及零拷贝讲的不是特别详细,后面可以单独针对这2个主题深入调研,整理学习笔记。

标签:调用,Day3,笔记,RPC,内核,IO,进程,拷贝
From: https://www.cnblogs.com/wing011203/p/17062385.html

相关文章

  • 学习笔记——@PathVariable注解基本使用;@PathVariable注解属性;REST风格CRUD概述;实现PU
    2023-01-19一、@PathVariable注解基本使用1、获取URL中占位符2、占位符语法:{}3、实例代码:@RequestMapping("testPathVariable/{empId}")publicStringtestPath......
  • Datawhale组队学习——人工智能:一种现代方法(第四版)Task01学习笔记
    1.1什么是人工智能对于智能的理解:有些人将智能视为内部思维过程和推理的属性,有些人则关注智能的外部特征,也就是智能行为。emmmm,看书之前,我本以为看完之后了会收获很多......
  • 狂神说笔记——Linux快速入门27
    Linux快速入门参考于:B站狂神视频!Java开发之路:JavaSE、MySQL、前端(HTML、Css、JS)、JavaWeb、SSM框架、SpringBoot、Vue、SpringCloud、Mybatis-plus、Git、Linux(CentO......
  • 狂神说笔记——Nginx快速入门28
    Nginx快速入门在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户。随着用户越来越多了,并发量慢慢增大了,此时一台服务器满足不了需求了。于......
  • fabric学习笔记8
    fabric学习笔记820201303张奕博2023.1.19具体结构:Wallet中的X.509数字证书将组织和持有者联系起来,使得持有者能够有权限连接到网络,不同的持有者身份拥有不同的权限,并......
  • 数学分析笔记【5】 数列极限
    数列与数列极限的定义定义5.1称函数\(f:\mathbb{N}^{+}\rightarrow\mathbb{R}\)为数列,写作小写字母与下标的形式,如\[a_1,a_2,a_3,\cdots,a_n\leftrightarrowf(1),f......
  • 树状数组笔记整理
    树状数组介绍树状数组,顾名思义,就是树状的一维数组。二叉树同样也可以用一维数组存储。我们以二叉树进行类比。如图所示,图中节点的序号就是存在数组中的下标。记父节点......
  • [ 4--雪花算法学习 | 青训营笔记]
    这是我参与「第五届青训营」伴学笔记创作活动的第4天背景在大自然雪花(snowflake)形成过程中,会形成不同的结构分支,所以说不存在两片完全一样的雪花,表示生成的id如雪花般......
  • ZFS学习笔记
    zfs学习笔记一、zfs概念:ZFS介绍ZFS特性:存储池raid集成于各种RAID与条带技术于一身的技术[软raid],不再依赖于硬件RAID卡,只依赖于计算机上能转接多少硬盘。写实拷......
  • 学习笔记——@RequestMapping注解位置、注解属性;@RequestMapping支持Ant风格的路径
    2023-01-19一、@RequestMapping注解位置1、书写在类上面(1)作用:为当前类设置映射URL(2)注意:不能单独使用,需要与方法上的@RequestMapping配合使用2、书写在方法上面(1)作用:......