AXI 总线协议学习笔记(4)

news2024/9/29 7:21:08



引言

前面两篇博文从简单介绍的角度说明了 AXI协议规范。

AXI 总线协议学习笔记(2)

AXI 总线协议学习笔记(3)

从本篇开始,详细翻译并学习AXI协议的官方发布规范。


文档中的时序图说明:

AXI指:Advanced eXtensible Interface,高级可扩展接口。

Part A ——AMBA AXI 协议规范

A1:介绍

A1.1 关于 AXI 协议

AMBA AXI协议支持管理器和从属器组件之间的高性能,高频率通信。

AXI协议特点:

  1. 适合高带宽低延迟设计。
  2. 不用复杂的桥接就可以支持高频操作。
  3. 该协议满足各种组件的接口要求。
  4. 它适用于具有高初始访问延迟的存储器控制器。
  5. 提供了互连架构实现的灵活性。
  6. 它向后兼容AHB和APB接口。

AXI协议的关键特性是:

  1. 单独的地址/控制和数据阶段。
  2. 支持使用字节选通进行未对齐的数据传输。
  3. 使用仅发出起始地址的基于突发的事务。
  4. 独立的读写数据通道,可以提供低成本的直接内存访问(DMA)。
  5. 支持发出多个未完成的地址。
  6. 支持无序事务完成。
  7. 允许轻松添加寄存器级以提供时序收敛。

A1.2 AXI架构

AXI协议基于突发,定义了五个独立的事务通道:

  1. 读地址通道,该通道的信号名以AR开头;
  2. 读数据通道,该通道的信号名以R开头;
  3. 写地址通道,该通道的信号名以AW开头;
  4. 写数据通道,该通道的信号名以W开头;
  5. 写响应通道,该通道的信号名以B开头;

地址信道携带描述要传输的数据的性质的控制信息。数据通过以下任一方式在管理器和从属器组件之间传输:

  1. 管理者通过写数据通道向从属者传输数据。在一次写事务中,从属者通过写响应通道告知管理者数据传输完成。
  2. 管理者通过读数据通道向从属者拿取数据。

AXI协议:

  1. 允许在实际数据传输之前发布地址信息。
  2. 支持多个未完成事务。
  3. 支持事务无序完成。

下图所示,写通道架构:

读通道架构:

 A1.2.1 通道定义

每个通道都包括一组信息信号,VALIDREADY 信号提供了双向握手机制。

源端利用 VALID 信号表征此通道上地址、数据或控制信息何时有效。目的端利用 READY 信号表征何时准备好接收源端信息。读写数据通道均包含一个 LAST 信号,来表征传输事务中传输的最后一个数据。

读写地址通道

读写事务均包含自己的地址通道。对应的地址通道会传输一次事务中需要的地址和控制信息。

读数据通道

读数据通道同时携带读取的数据和读响应信息,由下属侧传至管理器侧。

包含:

  1. 数据总线信号,位宽可为,8,16,32,64,128,256,512,或1024;
  2. 一个读响应信号,表征读事务完成的状态。

写数据通道

写数据通道用于传输从管理器侧发往从属器侧的写数据。

包括:

  1. 数据总线信号,位宽可为,8,16,32,64,128,256,512,或1024;
  2. 每八个数据位的字节通道选通信号,指示有效数据的字节。

写入数据通道信息始终被视为缓冲,因此管理器可以执行写入事务,而无需从属确认先前的写入事务。

写响应通道

下属使用写响应通道来响应写事务。所有写入事务都需要写响应信道上的完成信令。仅对完整事务发出完成信号,而不是对事务中的每个数据传输发出完成信号。

A1.2.2 接口和互联

一个典型的系统由多个管理器和从属设备组成,这些设备通过某种形式的互连连接在一起,如图所示。

AXI协议为以下接口提供了单一接口定义:

  1. 管理器和互联器
  2. 从属器和互联器
  3. 管理器和从属器

上述的接口定义支持多种不同的互联实现。

设备之间的互连等同于另一个具有对称的管理器和从属端口的设备,真正的管理器设备和从属设备可以连接这些端口。

典型的系统拓扑结构

绝大部分系统使用如下3种的互联拓扑结构:

  1. 共享地址数据总线
  2. 共享地址总线和多条数据总线
  3. 多层,具有多个地址和数据总线

在大多数系统中,地址信道带宽要求明显小于数据信道带宽要求。这样的系统可以通过使用具有多个数据总线的共享地址总线来实现并行数据传输,从而在系统性能和互连复杂性之间实现良好的平衡。

A1.2.3 寄存器切片

每个AXI信道仅在一个方向上传输信息,并且该架构不需要信道之间的任何固定关系。这些特性意味着可以在任何通道的几乎任何点插入寄存器片,而代价是额外的延迟周期。

注意

  1. 延迟周期和最大操作频率之间的权衡。
  2. 处理器和高性能内存之间的直接、快速连接,但使用简单的寄存器片来隔离到性能不太关键的外围设备的较长路径。

A1.3 术语

A1.3.1 AXI组件和拓扑结构

组件:具有至少一个AMBA接口的独特功能单元。组件可用作管理器、从属、外围和互连组件。

管理器组件:启动事务的组件。单个组件可能同时充当管理器组件和从属组件。例如,直接内存访问(DMA)组件在启动事务以移动数据时可以是管理器组件,在被编程时可以是从属组件。

从属器组件:一种接收事务并对其作出响应的组件。单个组件可以同时充当从属组件和管理器组件。例如,直接内存访问(DMA)组件在被编程时可以是从属组件,在启动事务以移动数据时可以是管理器组件。包括:存储器从属器件以及外设从属器件。

存储器从属器件:

内存从属组件或内存从属组件是具有以下属性的从属组件:

  • 从内存从属存储器读取字节将返回写入该字节位置的最后一个值。
  • 对从属存储器中字节位置的写入会将该位置的值更新为通过后续读取获得的新值。
  • 多次读取一个位置对任何其他字节位置都没有副作用。
  • 读取或写入一个字节位置对任何其他字节位置都没有副作用。

外设从属器件:

外围从属组件也称为外围从属组件。本规范建议外围从属设备具有通常在组件数据表中描述的“实施定义”访问方法。任何未定义为允许的访问都可能导致外围从属设备失败,但必须以协议正确的方式完成,以防止系统死锁。该协议不要求外围设备继续正确操作。
在本说明书中的描述上下文中,外围从属设备与外围设备、外围组件、外围设备和设备同义。

互联组件:具有多个AMBA接口的组件,将一个或多个管理器组件连接到一个或更多从属组件

互连组件可用于组合在一起:

  • 一组管理器,使其显示为单个管理器界面。
  • 一组从属项,使其显示为单个从属项界面。

A1.3.2 AXI 事务和存储器类型

当AXI管理器启动AXI操作时,以AXI从属器为通信目标:

  • AXI总线上所需的一整套操作构成AXI事务(事务指:AXI管理器启动AXI事务以与AXI从属服务器通信。通常,交易需要在经理和下属之间通过多个渠道交换信息。所需的一整套信息交换构成AXI事务。)。
  • 任何所需的有效载荷数据都作为AXI突发传输(Burst指:在AXI事务中,有效载荷数据在单个突发中传输,该突发可以包括多个节拍或单个数据传输。)
  • 突发可以包括多个数据传输或AXI Beats(AXI Beats指:AXI突发内的单个数据传输。)

A1.3.3 缓存和缓存操作

本规范没有定义任何缓存参考工作中定义的标准缓存术语。
然而,缓存和缓存行的词汇表条目阐明了这些术语在本文档中的使用方式。

缓存:缓存管理器中的任何缓存、缓冲区或其他存储结构,可以保存特定地址位置。

缓存线:高速缓存中的基本存储单位。它的大小总是2的幂。缓存线必须与缓存线的大小对齐。缓存行的大小相当于一致性颗粒。

A2:信号描述

A2.1 全局信号

AXI3或者AXI4协议中的全局信号

信号名称:ACLK

源:时钟源

说明:全局时钟信号,同步信号在该全局时钟的上升边沿采样。

信号名称:ARESETn

源:复位源

说明:全局复位信号,低电平复位有效。

A2.2 写地址通道信号

除专门说明外,所有信号适用于AXI3和AXI4协议。

信号名称:AWID

源:管理器

说明:写事务的标识标记。

信号名称:AWADDR

源:管理器

说明:写入事务中第一次传输的地址。

信号名称:AWLEN

源:管理器

说明:突发写入长度,写入事务中数据传输的确切数量。该信息确定与地址相关联的数据传输次数。

信号名称:AWSIZE

源:管理器

说明:表示写事务中,所传输的每个数据所占的字节数。

信号名称:AWBURST

源:管理器

说明:突发类型。指定一次传输事务中,每次数据传输的地址变化规律。

信号名称:AWLOCK

源:管理器

说明:提供有关写事务原子特性。此信号在AXI第3、4代之间有变化。

信号名称:AWCACHE

源:管理器

说明:指示写入事务如何在系统中进行。

信号名称:AWPROT

源:管理器

说明:写事务的保护属性,包括 权限、安全级别和访问类型。

信号名称:AWQOS

源:管理器

说明:写事务服务质量标识。AXI3中未实现。

信号名称:AWREGION

源:管理器

说明:写入事务的区域指示符。AXI3中未实现。

信号名称:AWUSER

源:管理器

说明:写入事务的用户自定义扩展。AXI3中未实现。

信号名称:AWVALID

源:管理器

说明:指示写事务通道信号的有效性。

信号名称:AWREADY

源:从属器

说明:指示从属器可以接收写地址通道的传输。

A2.3 写数据通道信号

信号名说明
WID管理器写数据传输的ID标签,仅在AXI3中实现
WDATA管理器写数据
WSTRB管理器写选通,一位负责一个字节
WLAST管理器表明写数据的最后一个数据
WUSER管理器写数据通道的用户自定义信号
WVALID管理器写数据通道有效信号
WREADY从属器写数据通道的可接收状态信号

A2.4 写响应通道信号

信号名说明
BID从属器写响应的ID标签
BRESP从属器写响应,表明写事务完成的状态
BUSER从属器写响应通道的用户自定义信号
BVALID从属器写响应通道有效信号
BREADY管理器写响应通道的可接收状态信号

A2.5 读地址通道信号

除专门说明外,所有信号适用于AXI3和AXI4协议。

信号名称:ARID

源:管理器

说明:读事务的标识标记。

信号名称:ARADDR

源:管理器

说明:读事务中第一次传输的地址。

信号名称:ARLEN

源:管理器

说明:突发写入长度,读事务中数据传输的确切数量。该信息确定与地址相关联的数据传输次数。

信号名称:ARSIZE

源:管理器

说明:表示读事务中,所传输的每个数据所占的字节数。

信号名称:ARBURST

源:管理器

说明:突发类型。指定一次传输事务中,每次数据传输的地址变化规律。

信号名称:ARLOCK

源:管理器

说明:提供有关读事务原子特性。此信号在AXI第3、4代之间有变化。

信号名称:ARCACHE

源:管理器

说明:指示读事务如何在系统中进行。

信号名称:ARPROT

源:管理器

说明:读事务的保护属性,包括 权限、安全级别和访问类型。

信号名称:ARQOS

源:管理器

说明:读事务服务质量标识。AXI3中未实现。

信号名称:ARREGION

源:管理器

说明:读事务的区域指示符。AXI3中未实现。

信号名称:ARUSER

源:管理器

说明:读事务的用户自定义扩展。AXI3中未实现。

信号名称:ARVALID

源:管理器

说明:指示读事务通道信号的有效性。

信号名称:ARREADY

源:从属器

说明:指示从属器可以接收读地址通道的传输。

A2.6 读数据通道信号

信号名说明
RID从属器读数据和读响应的ID标签
RDATA从属器读数据
RRESP从属器读响应,表征读的状态
RLAST从属器表明读数据的最后一个数据
RUSER从属器读数据通道的用户自定义信号
RVALID从属器读数据通道有效信号
RREADY管理器读数据通道的可接收状态信号

A3:信号接口要求

A3.1 时钟和复位

时钟

每个AXI接口都只有一个时钟信号ACLK。所有的输入信号在ACLK的上升沿采样,所有的输出信号的变化发生在ACLK的上升沿之后。

在管理器和从属器接口上,输入和输出信号之间不能有组合路径。

复位

AXI协议使用仅使用一个低电平有效的复位信号,ARESETn。该信号可以异步断言,但是复位撤离时必须与ACLK的上升边沿同步。

复位期间,需满足如下的接口信号要求:

  • 管理器接口必须将 ARVALID, AWVALID,  WVALID 信号拉低。
  • 从属器接口必须将 RVALID , BVALID 信号拉低。
  • 其他信号可以为任意值。

管理器在复位信号撤离后最早可以将 ARVALID, AWVALID, WVALID 信号拉高的时刻是复位信号ARESETn 为高电平后 ACLK 的第一个上升边沿。如下时序图:

A3.2 基本读写事务

握手过程

AXI协议的5个通道全是用 VALID/READY 去完成数据、地址、控制信息传输过程的握手。这种双向流控制机制意味着管理器和从属器都可以控制信息在二者之间移动的速率。源端 产生VALID信号指示地址、数据、控制信息的有效性。目的端 产生READY信号指示其已准备好可以接受来自源端的信息。当且仅当VALID/READY信号均为高电平,成功握手时,才产生一次有效传输。在管理器和从属器接口上,输入和输出信号之间不能有组合路径。(一般都是直线连线)握手时序图,握手在T3时刻完成:

 源端 在目的端接收到有效信息之前,应在总线上一直保持将要传输的有用信息。

源端 在断言VALID信号之前,不允许一直等待 READY信号的断言。

当VALID信号断言时,其应一直保持该信号的有效性直到握手发生,握手时刻发生在READY / VALID信号均断言的第一个时钟上升沿。下图是目的端在源端断言VALID信号之前断言READY的时序图,握手在T3时刻完成:

目的端 在断言对应的READY信号之前,允许一直等待源端VALID信号断言。

如果READY信号断言,那么在VALID信号断言之前可以取消断言READY信号。下图的时序图中,在T2时刻完成握手。

通道信号要求

每个通道都有各自的握手信号:

写地址通道

管理器给出有效的地址和控制信息时就可以将 AWVALID 信号断言,一旦断言 AWVALID 信号必须一直保持有效至 AWREADY 信号断言后的第一个时钟上升沿。

AWREADY 信号默认的状态可以是高电平也可以是低电平。协议规范建议的默认状态是高电平。当AWREADY 信号为高电平时,从属器必须有能力接受发给它的任何有效地址。

——注意——

协议规范之所以不推荐默认状态为低电平的原因在于,如果这样会迫使传输至少消耗2个时钟周期,一个周期断言AWVALID 一个周期断言 AWREADY。

写数据通道

在一次突发写入期间,管理器给出有效的写数据时就可以将 WVALID 信号断言,一旦断言 WVALID 信号必须一直保持有效至 WREADY 信号断言后的第一个时钟上升沿。

WREADY 信号默认的状态可以是高电平,唯有如此,从属器才可以在一个时钟周期接收写数据。

管理器必须在其写突发传输中给出最后一个写数据时断言 WLAST 信号。

协议规范建议将 WDATA 无效的字节通道置零。

写响应通道

从属器当且仅当其发出有效写响应时,断言 BVALID 信号。一旦断言 BVALID 信号必须一直保持有效至 BREADY 信号断言后的第一个时钟上升沿。

BREADY 信号默认的状态可以是高电平,唯有如此,管理器才可以在一个时钟周期接收写响应。

读地址通道

管理器给出有效的地址和控制信息时就可以将 ARVALID 信号断言,一旦断言 ARVALID 信号必须一直保持有效至 ARREADY 信号断言后的第一个时钟上升沿。

ARREADY 信号默认的状态可以是高电平也可以是低电平。协议规范建议的默认状态是高电平。当ARREADY 信号为高电平时,从属器必须有能力接受发给它的任何有效地址。

——注意——

协议规范之所以不推荐默认状态为低电平的原因在于,如果这样会迫使传输至少消耗2个时钟周期,一个周期断言ARVALID 一个周期断言 ARREADY。

读数据通道

从属器当且仅当其发出有效写响应时,断言 RVALID 信号。一旦断言 RVALID 信号必须一直保持有效至 RREADY 信号断言后的第一个时钟上升沿。尽管一个从属器只有一个数据读取的源端,但是同样必须断言 RVALID 信号以回应数据请求。

管理器通过断言 RREADY 信号去指示其可以接收数据。RREADY 信号的默认状态可以是高电平,但前提是管理器在启动读取事务时能够立即接受读取数据。

从属器必须在其读突发传输中给出最后一个写数据时断言 RLAST 信号。

协议规范建议将 RDATA 无效的字节通道置零。

A3.3 通道间的关系

AXI协议有如下的关系需要保持:

  • 写响应必须紧跟在写事务最后一个数据传输之后。
  • 读数据必须紧跟读取数据的地址之后。
  • 信道握手必须符合 信道握手信号之间的依赖关系 中定义的依赖关系。

该协议没有定义任何其他的通道间关系。

通道间的依赖关系缺失意味着,在一个事务中,写数据可以先于写地址出现。如果写地址通道比写数据通道包含更多级的寄存器,这种情况可能发生。类似地,写数据可能和地址在相同的时钟周期出现。

——注意——

当互连需要确定目标地址空间或从属空间时,它必须重新对齐写地址和数据。需要这种重新排列以确保写入数据仅对其目的地的从属方有效。

————————

当管理器发出写请求时,它必须能够提供该事务的所有写数据,而不依赖于该管理器的其他事务。

当管理器发出读取请求时,它必须能够接受该事务的所有读取数据,而不依赖该管理器的其他事务。

请注意,管理器可以依赖使用相同ID的事务按顺序返回的读取数据,因此管理器只需要足够的存储空间来存储来自具有不同ID的事务的读取数据。

通道间握手信号的依赖关系

为了避免死锁状况,必须遵守握手信号之间存在的依赖性规则。

  • 发送信息的AXI接口的 VALID 信号必须不依赖于接收该信息的AXI接口的 READY 信号。
  • 正在接收信息的AXI接口可以等待直到它检测到 VALID 信号,然后才断言其相应的 READY 信号。

—— 注意 ——

在断言 READY 之前等待 VALID 被断言是可以接受的。在检测到相应的 VALID 之前断言READY也是可以接受的。这可以导致更有效的设计。

————————

此外,不同通道上的握手信号之间存在依赖性,AXI4定义了额外的写响应依赖性。以下小节定义了这些依赖关系:

  • 读事务依赖关系
  • AXI3写事务依赖关系
  • AXI4和AXI5写事务依赖关系

在依赖关系的图中:

  • 单箭头指向可以在 箭头开始处的信号 之前或者之后断言的信号
  • 双箭头指向只能在 箭头开始处信号 之后断言的信号

读事务依赖关系

下图所示是读事务握手信号的依赖关系:

  • 管理器在断言 ARVALID 信号之前禁止等待从属器断言 ARREADY 信号。
  • 从属器在断言 ARREADY 信号之前可以等待 ARVALID 信号的断言。
  • 从属器可以在 ARVALID 信号断言之前断言 ARREADY 信号。
  • 从属器必须等待 ARVALID 信号 和 ARREADY 信号均断言,才可以断言 RVALID 信号。
  • 从属器在断言 RVALID 信号之前禁止等待管理器断言 RREADY信号。
  • 管理器在断言 RREADY信号之前可以一直等待 RVALID 信号的断言。
  • 管理器可以在 RVALID 信号断言之前断言 RREADY。

AXI3写事务的依赖关系

下图所示是写事务握手信号的依赖关系:

  • 管理器在断言 AWVALID 信号或 WVALID 信号之前禁止等待从属器断言 AWREADY 信号或 WREADY 信号。
  • 从属器在断言 AWREADY 信号之前可以一直等待 AWVALID 信号 或 WVALID 信号。
  • 从属器可以在 AWVALID 信号或 WVALID 信号断言之前断言 AWREADY信号。
  • 从属器在断言 WREADY 信号之前一直等待 AWVALID 信号或 WVALID 信号。
  • 从属器可以在 AWVALID 信号或 WVALID 信号断言之前断言 WREADY 信号。
  • 从属器在断言 BVALID 信号之前,一定要等待 WVALID 信号和 WREADY 信号断言,完成握手。从属器在断言 BVALID 信号之前也必须等待 WLAST断言完成。这个等待是必须的,因为写响应 BRESP 必须在写事务最后一个数据传输完成后起作用。
  • 从属器在断言 BVALID 信号之前禁止等待管理器断言 BREADY 信号。
  • 管理器可以在断言 BREADY 信号之前一直等待 BVALID 信号的断言。
  • 管理器可以在 BVALID 信号断言之前断言 BREADY 信号。

—— 注意 ——

为避免死锁状况必须遵守上述的依赖规则。例如,管理器在驱动(断言)WVALID 信号之前禁止一直等待 AWREADY 信号的断言。当此时从属器在断言 AWREADY 信号之前一直等待 WVALID 信号,就会出现死锁状况,导致一直无法握手,无法通信。

——————————

参考说明

【1】AMBA® AXI and ACE Protocol Specification.


未完结,持续更~

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

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

相关文章

基础面试题:堆和栈的区别

面试题:堆和栈的区别(往往讲的是内存zha) 为什么说访问栈栈比访问堆快些? 目录 一、数据结构中的堆栈 1、数据结构中的堆 1)堆的定义 2)堆的效率 2、 数据结构中的栈 二、内存中的堆栈 1、内存堆的定义…

Stm32 for arduino STM32G071GBU6 I2C and SERIAL

文件目录: C:\Users\Administrator\AppData\Local\Arduino15\packages\STMicroelectronics\hardware\stm32\2.3.0\variants\STM32G0xx\G071G(6-8-B)U_G081GBU boards_entry.txt Generic G071GBUx GenG0.menu.pnum.GENERIC_G071GBUXGeneric G071GBUx GenG0.menu.pnum.GENERIC…

SpringMVC:统一异常处理(11)

统一异常处理1. 说明2. 问题描述3. 异常处理器使用3.1 创建异常处理器类3.2 让程序抛出异常3.3 测试4. 项目异常处理方案4.1 异常分类4.2 异常解决方案4.3 异常解决方案的具体实现4.4 测试5. 总结1. 说明 \quad本篇文章是在文章SpringMVC:SSM整合(Spring…

【Vuex 源码学习】第六篇 - Vuex 的模块收集

一,前言 上一篇,主要介绍了 Vuex 中 Mutations 和 Actions 的实现,主要涉及以下几个点: 将 options 选项中定义的 mutation 方法绑定到 store 实例的 mutations 对象;创建并实现 commit 方法(同步&#x…

最近挺火的人工智能chatGPT注册

文章目录1.前提预备1.1 短信接收平台1.2 ip加速,不做说明2.注册chatGPT步骤2.1 进入chat.openai.com网址后,点击sign up2.2 可以使用qq邮箱注册2.3 填写好邮箱,然后点击Continue,然后再填写密码2.4 之后在qq邮箱进行验证注册(注意&#xff1a…

C++入门——内存管理

C入门——内存管理 C/C内存分布 分类是为了更好的管理 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] {1, 2, 3, 4};char char2[] "abcd";char* pChar3 "abcd";int* ptr1 (…

Java、JSP环境保护与宣传网站的设计与实现

技术:Java、JSP等摘要:本文对环境保护与宣传网站的设计和开发过程进行了详细地分析与叙述。按照系统开发的实际操作流程以及论文编写的规范,论文内容从系统概述、系统分析、系统设计和系统实现这四大模块对系统的开发过程分别进行了阐述。系统…

python3-API流量回放/锲约测试/自动化测试

PPL-Tester 简介 http工具集,通过代理获取到API的请求与响应信息,将这些请求信息进行流量回放/锲约测试或快速生成用例, 亦可通过人工进行修改参数化提取、变量引用、断言等形成API自动化测试用例等! 你以为只是流量回放吗?错~走去瞧瞧v2版本! 看官~请记得给个star呗? 项…

驱动 | Linux | NVMe - 1. 概述

本文主要参考2篇相关的解析 1’ 2 和 linux 源码 3。 此处推荐一个可以便捷查看 linux 源码的网站 bootlin 4。 更新:2022 / 02 / 11 驱动 | Linux | NVMe - 1. 概述与nvme_core_init函数解析NVMe 的前世今生NVMe CommandPCI 总线从架构角度看 NVMe 驱动NVMe 驱动的…

前端开发中如何处理接口数据过大的问题

题引: 当我们在公司做项目的时候,难免会遇到后端接口直接给你返回成千上万的数据进行渲染。如果我们直接一股脑遍历添加的话,就会导致空白页面的等待时间是很长且异常卡顿,那么对于数据过大的渲染就需要进行特殊的处理。这也是一…

PyQt5数据库开发1 4.1 SQL Server 2008 R2如何开启数据库的远程连接

文章目录 前言 步骤/方法 1 使用windows身份登录 2 启用混合登录模式 3 允许远程连接服务器 4 设置sa用户属性 5 配置服务器 6 重新登录 7 配置SSCM 8 确认防火墙设置 注意事项 前言 SQL Server 2008 R2如何开启数据库的远程连接 SQL Server 2008默认是不允许远程连…

ExecutorService、Callable、Future实现有返回结果的多线程原理解析

在并发多线程场景下,存在需要获取各线程的异步执行结果,这时,就可以通过ExecutorService线程池结合Callable、Future来实现。 我们先来写一个简单的例子—— public class ExecutorTest {public static void main(String[] args) throws Ex…

KMP 算法

1 应用场景-字符串匹配问题  字符串匹配问题:: 有一个字符串 str1 ““硅硅谷 尚硅谷你尚硅 尚硅谷你尚硅谷你尚硅你好””,和一个子串 str2“尚硅谷你尚硅 你” 2) 现在要判断 str1 是否含有 str2, 如果存在,就返回第一次出现…

数据与C(limits.h数据常数介绍)

本章简单的介绍一下limits.h的数据常量,这里简单了解一下就好了 目录 一.limits.h 二.float.h头文件 一.limits.h CHAR_BIT char类型的位数 CHARMAX char类型的最大值 CHAR_MIN char类型的最小值 SCHAR_MAX signed char类型的最大…

SpringBoot图片上传和访问路径映射

图片上传和静态资源映射编写controller层接口上传到文件夹相关配置1 application.properties配置文件:2 Constant类:文件的资源映射配置WebMvcConfigurer的继承类注意测试编写controller层接口 ApiOperation("图片上传功能")PostMapping(&quo…

Java笔记-volatile和AtomicInteger

目录1. volatile1.1.什么是volatile1.2.JMM-Java内存模型2 验证volatile的特性2.1 可见性2.2.验证volatile不保证原子性2.3 volatile实现禁止指令重排序3.使用AtomicInteger解决volatile的不能实现原子性的问题3.2 AtomicInteger的方法说明:3.3 CAS3.4 应用1. volat…

linux-进程1-进程概述

写在最前 记录一下linux的进程学习专题 1. 程序和进程的区别 1.1 程序 程序是包含一系列信息的文件,这些信息描述了如何在运行时创建一个进程: 二进制格式标识:每个程序文件都包含用于描述可执行文件格式的元信息。内核利用此信息来解 释文…

Redis实战-session共享之修改登录拦截器

在上一篇中Redis实战之session共享,我们知道了通过Redis实现session共享了,那么token怎么续命呢?怎么刷新用户呢?本来咱们就通过拦截器来实现这两个功能。 登录拦截器优化: 先来看看现在拦截器情况: 拦截…

JavaScipt基础学习(1)

1. JavaScript特点 JavaScript是脚本编写语言;所有主流浏览器都支持JavaScript;JavaScript基于对象语言;JavaScriptb变量类型是弱类型,没有如Java一样严格的数据类型;变量是弱类型的。因此定义变量时,只使…

WindowsServer服务器系列:部署FTP文件服务

1、点击“开始”菜单,选择“服务器管理器” 2、在接下来弹出页面中选择“添加角色和功能” 3、接下来点击“下一步” 4、接下来选择“基于角色或基于功能的安装”并点击“下一步” 5、选择“从服务器池中选择服务器”并点击“下一步” 6、接下来选中“Web 服务器(II…