DP读书:鲲鹏处理器 架构与编程(六)PCI Express 总线
处理器与服务器:PCI Express 总线
- PCI Express 总线
- 1. PCI Express 总线的特点
- a. 高速差分传输
- b. 串行传输
- c. 全双工端到端连接
- d. 基于多通道的数据传输方式
- e. 基于数据包的传输
- 2. PCI Express 总线的组成与拓扑结构
- a. 根复合体
- b. PCI Express桥
- c. 功能单元
- 3. PCI Express 总线的层次结构
- a. 层次结构
- b. 分组结构
- 4. PCI Express 总线的拓扑发现
- 5. PCI Express 总线的总线事务
- 6. PCI Express 总线的地址空间
- 7. PCI Express 总线的中断机制
- 8. PCI Express 总线的差错处理和差错报告
PCI Express 总线
PCI Express(Peripheral Component Interconnect Express)是一种高速串行计算机扩展总线标准,原来的名称为“3GIO”,是由英特尔在2001年提出的。PCIe属于高速串行点对点双通道高带宽传输,所连接的设备分配独享通道带宽,不共享总线带宽,主要支持主动电源管理,错误报告,端对端的可靠性传输,热插拔以及服务质量(QOS)等功能。PCIe交由PCI-SIG(PCI特殊兴趣组织)认证发布后才改名为“PCI-Express”,简称“PCI-e”。PCI Express有多种规格,从PCI Express x1到PCI Express x32,能满足将来一定时间内出现的低速设备和高速设备的需求。
1. PCI Express 总线的特点
a. 高速差分传输
PCI Express总线的特点之一是高速差分传输。这种传输方式使用LVDS(Low Voltage Differential Signaling,低电压差分信号) 技术,允许多个设备通过一条高速数据线进行连接,从而实现更高的数据传输速率。PCI Express x16接口支持的最大数据传输速率可达16GB/s,足以满足各种高速设备的需求。
b. 串行传输
PCI Express总线另一个特点是串行传输。与传统的并行总线不同,PCI Express总线采用串行方式传输数据。这种传输方式具有更高的数据传输速率和更低的传输延迟。串行传输还可以减少所需的信号线数量,从而降低硬件成本和系统复杂性。
c. 全双工端到端连接
PCI Express总线的一个特点是全双工端到端连接。这意味着数据可以在两个方向上同时传输,从而提高了传输效率。这种连接方式是基于数据包的传输,可以实现类似计算机网络中的交换和路由功能。
在PCI Express总线中,每个设备都有自己的专用 通道(Lane),可以直接与其他设备进行通信。这种分布式通信架构提高了系统性能和可dB扩展性。全双工传输方式还可以减少传输延迟,提高数据传输速率。
总之,PCI Express总线通过全双工端到端连接实现了高性能、高带宽的数据传输。这种连接方式提高了传输效率和系统性能,适用于各种高速设备的应用场景。
d. 基于多通道的数据传输方式
PCI Express总线采用基于多通道的数据传输方式。这种传输方式允许多个设备通过一条高速数据线连接,从而实现更高的数据传输速率。PCI Express总线支持1、2、4、8、12、16和32通道的连接,以满足不同系统设备对数据传输带宽的不同需求。
基于多通道的数据传输方式可以提高数据传输的效率和速度。通过将数据分配到不同的通道中,可以同时处理多个数据流,从而减少传输延迟并提高系统性能。
此外,PCI Express总线还支持数据分通道传输模式。在这种模式下,数据可以在不同的通道中同时传输,从而实现更高的数据传输速率。例如,PCI Express x16接口可以实现最大16GB/s的数据传输速率,足以满足高速设备的需求。
总之,PCI Express总线采用基于多通道的数据传输方式,提高了数据传输的效率和速度,适用于各种高速设备的应用场景。
e. 基于数据包的传输
PCI Express总线采用基于数据包的传输方式。这种传输方式将数据封装在数据包中,并通过PCI Express总线进行传输。每个数据包都包含发送方的信息和接收方的信息,从而实现了高效的数据传输。
基于数据包的传输方式具有以下优点:
1. 高效性:基于数据包的传输方式可以避免不必要的传输,从而提高了传输效率。
2. 灵活性和扩展性:基于数据包的传输方式可以灵活地支持不同的数据类型和数据长度,并且可以随着系统的扩展而扩展。
3. 支持QoS和虚拟通道:基于数据包的传输方式支持QoS(Quality of Service)和虚拟通道,可以实现优先级控制和特定数据流的传输。
4. 支持热插拔和电源管理:基于数据包的传输方式支持热插拔和电源管理,可以提高系统的可靠性和节能性能。
总之,PCI
Express总线采用基于数据包的传输方式,具有高效性、灵活性和扩展性,支持QoS和虚拟通道,以及热插拔和电源管理等功能,适用于各种高速设备的应用场景。
2. PCI Express 总线的组成与拓扑结构
a. 根复合体
PCI Express总线由多个组件组成,其中最重要的是根复合体(Root Complex)。
根复合体是PCI Express总线中的一个关键组件,它负责将主机系统连接到PCI Express总线。根复合体通常由一个或多个**根端口(Root Port)**组成,每个根端口都可以连接一个或多个PCI设备。
根复合体还可以包含其他组件,例如串行总线(Serial Bus) 和 中断控制器(Interrupt Controller) 等。串行总线用于连接多个设备,而中断控制器则负责处理中断请求。
PCI Express总线的拓扑结构可以根据具体应用场景进行调整。常见的拓扑结构包括星型、树型和Mesh型等。在星型拓扑中,所有设备都直接连接到根复合体;在树型拓扑中,设备可以按照层次结构进行连接,形成类似树的形状;在Mesh型拓扑中,设备之间可以有多条连接路径,从而提高了系统的可靠性和可扩展性。
总之,PCI Express总线由多个组件组成,其中最重要的是根复合体。根复合体负责将主机系统连接到PCI Express总线,并可以包含其他组件。PCI Express总线的拓扑结构可以根据具体应用场景进行调整,常见的拓扑结构包括星型、树型和Mesh型等。
b. PCI Express桥
除了根复合体之外,PCI Express总线还包括PCI Express桥。
PCI Express桥是PCI Express总线中的一个重要组件,它的作用是将PCI Express总线连接到其他类型的总线或设备。通过桥接,PCI Express总线可以与其他总线或设备进行通信和数据传输。PCI Express桥可以连接不同类型的总线或设备,例如PCI总线、AGP总线、USB总线等。通过桥接,这些设备可以与PCI Express总线进行通信和数据传输。在PCI Express总线的拓扑结构中,桥是常见的组件之一。通过桥接,可以将多个总线或设备连接在一起,形成一个更大的网络。这种网络可以是星型、树型或Mesh型等,具体取决于应用场景和系统设计。
总之,PCI Express总线中的另一个重要组件是PCI Express桥,它的作用是将PCI Express总线连接到其他类型的总线或设备,从而形成一个更大的网络。
c. 功能单元
PCI Express总线由以下几个主要功能单元组成:
- 根组件(Root Complex)。 根组件是PCI Express总线的一个关键组件,它负责将主机系统连接到PCI E xpress总线。根组件通常由一个或多个**根端口(Root Port)组成,每个根端口都可以连接一个或多个PCI设备。根组件还可以包含其他组件,例如串行总线(Serial Bus)和中断控制器(Interrupt Controller)**等。
- 交换器(Switch)。 交换器是PCI Express总线中的一个重要组件,它的功能主要是为I/O总线提供输出端,并支持在不同终端设备间进行对等数据传输。交换器通常以软件的形式提供,包括多个逻辑PCI到PCI的桥连接,以及与传统PCI设备的兼容性。
- 终端设备(Endpoint)。 终端设备是PCI Express总线中的另一个重要组件,它可以被视为一个单独的设备,该设备通过PCI Express端口连接到总线上。终端设备通常具有高速数据传输能力,可以支持各种不同的数据类型和数据长度。
这些功能单元在PCI Express总线的拓扑结构中也扮演着重要的角色。例如,根组件可以形成一个星型或树型的拓扑结构,而交换器则可以在这个拓扑结构中提供更复杂的连接。同时,终端设备可以被视为拓扑结构中的节点,它们可以通过交换器进行通信和数据传输。
除了这些主要的功能单元外,PCI Express总线还包括其他一些组件,例如事务层、数据链路层和物理层等,这些组件提供了更高级别的功能和特性。
3. PCI Express 总线的层次结构
a. 层次结构
PCI Express总线采用分层设计,共分为四层,从下到上分别是物理层、数据链路层、处理层和软件层。
1. 物理层:物理层定义了电气和机械规范,包括线路规格、信号定义、传输速率等内容,它实现了比特流的传输。
2. 数据链路层:数据链路层负责在设备之间建立连接,并实现可靠的数据传输。数据链路层还处理错误检测和纠正,例如奇偶校验和冗余校验。
3. 处理层:处理层负责处理事务,例如数据包的封装、解封装和排序。处理层还负责处理各种请求类型,例如内存读/写请求、IO读/写请求等。
4. 软件层:软件层包括驱动程序和操作系统接口,它提供了标准的API接口,使得各种应用程序可以方便地使用PCI Express总线。
这种分层设计使得PCI Express总线具有灵活性和可扩展性,可以适应不同类型的应用需求。同时,分层设计也便于系统设计和管理,提高了系统的可靠性和稳定性。
b. 分组结构
PCI Express总线的分组结构是指数据包被分为多个组(Packet Group),每个组包含一个或多个数据包(Packet)。这种分组结构有助于提高数据传输的效率和可靠性。
在PCI Express总线的分组结构中,每个分组都包含以下信息:
1. 包头(Header):包头包含了该分组的元信息,例如分组的长度、类型、序列号等。
2. 数据段(Data):数据段包含了实际需要传输的数据,其长度由包头中的长度字段指定。
3. 帧间隔(Interframe Spacing):帧间隔是指在连续的两个帧之间插入的空闲时间,以保障总线稳定和避免数据冲突。
通过采用分组结构,PCI Express总线可以更好地处理数据传输过程中的各种问题,例如数据包的丢失、错误检测和纠正等。同时,分组结构也提高了数据传输的效率和可靠性,可以适应不同类型的应用需求。
4. PCI Express 总线的拓扑发现
PCI Express总线的拓扑发现是指通过一定的协议和机制,在系统中识别和确定PCI Express设备的连接关系和数据传输路径的过程。PCI Express总线采用了基于交换机和端点设备的拓扑结构,因此拓扑发现的结果可以反映这种结构的特点。
在PCI Express总线中,拓扑发现主要依赖于以下两个协议:
- PCI Express链路层协议:链路层协议定义了在PCI Express设备之间传输数据时所需的各种信号和消息,包括设备检测、配置、复位等操作。通过链路层协议,可以获取设备的链路状态和连接关系。
- PCI Express配置空间协议:配置空间协议定义了在设备初始化阶段,操作系统如何读取和配置设备的寄存器、接口、功能等信息。通过配置空间协议,可以获取设备的配置信息和能力。
在拓扑发现的过程中,通常需要执行以下步骤:
1. 设备检测:检测系统中是否存在PCI Express设备,以及设备的类型和数量。
2. 设备初始化:对设备进行初始化操作,包括分配设备号、设置设备参数等。
3. 设备枚举:通过读取配置空间协议中的设备寄存器和配置信息,获取设备的接口、功能、资源等信息。
4. 设备配置:根据设备的配置信息和能力,为设备分配必要的资源,并设置设备的参数。
5. 设备连接:通过链路层协议,检测设备的连接关系和链路状态,并建立设备之间的通信路径。
通过以上步骤,可以获取PCI Express总线的拓扑结构,包括设备的连接关系、设备的配置信息和数据传输路径等。这对于系统管理和应用程序开发都具有重要的意义。
5. PCI Express 总线的总线事务
PCI Express总线支持多种总线事务,包括存储器读写、IO读写、配置读写总线事务,以及Message消息总线事务等。
这些总线事务在PCIe设备之间传递数据时起到重要作用。例如,存储器读写事务用于直接操作硬件,产生总线周期实现数据传递;IO读写事务用于读写I/O端口的数据;配置读写事务用于读取或写入设备的配置信息;而Message消息事务则用于发送和接收消息类型的报文。
为了处理这些总线事务,PCI Express总线使用分层结构,其中事务层负责相应总线事务的转换。根据不同的事务类型,事务层会产生不同类型的TLP报文,并根据不同的路由方式进行数据转发。
graph TB
A[PCI Express总线]
B[南桥/北桥控制器]
C[设备]
D[I/O地址空间 (0x0000-0x3FFF)]
E[内存地址空间 (0xC0000000-0xF8000000)]
F[PCI总线编号 (Bus, Device, Function, Register)]
G[基址寄存器]
H[限制寄存器]
A -->|连接| B
B -->|映射到系统的I/O地址空间| D
B -->|映射到系统的内存地址空间| E
C -->|通过PCI总线编号进行寻址| F
C -->|提供基址寄存器和限制寄存器| G
C -->|提供基址寄存器和限制寄存器| H
6. PCI Express 总线的地址空间
PCI Express总线的地址空间分为两个部分:I/O地址空间和内存地址空间。
I/O地址空间用于访问设备的I/O端口,其地址范围是0x0000-0x3FFF。这些地址通过南桥或北桥控制器映射到系统的I/O地址空间,并通过PCI总线编号(Bus, Device, Function和Register) 进行寻址。
内存地址空间用于访问设备的内存,其地址范围是0xC0000000-0xF8000000。这些地址通过南桥或北桥控制器映射到系统的内存地址空间,并通过PCI总线编号(Bus, Device, Function) 进行寻址。在映射过程中,设备需要向北桥或南桥控制器提供基址寄存器(Base Register)和限制寄存器(Limit Register),以确定该设备所使用的内存范围。
需要注意的是,不同的操作系统和硬件平台可能对I/O地址空间和内存地址空间的映射方式有所不同,因此在进行系统设计时需要仔细考虑。
7. PCI Express 总线的中断机制
PCI Express总线中断机制与PCI总线类似,它支持传统的基于IRQ(Interrupt Request) 的中断方式,也引入了新的消息中断方式。
在传统的基于IRQ的中断方式中,每个设备有一个单独的IRQ线路,通过IRQ共享来减少中断的开销。这种方式在较老的PCI设备中比较常见。
在新的消息中断方式中,设备使用MSI(Message Signaled Interrupt)或 MSI-X(Message Signaled Interrupt eXtension) 发送中断请求到根设备。MSI使用32位消息地址和32位消息数据,而MSI-X使用更复杂的消息格式。这种方式可以提高中断处理的效率,适用于高性能、高吞吐量的设备。
在PCI Express总线中,中断控制器不再是必需的,根设备可以直接接收和处理中断请求。对于传统的基于IRQ的中断方式,中断控制器仍然需要,但可以通过PCI Express端点驱动程序进行配置和管理。
总之,PCI Express总线的中断机制支持传统基于IRQ的方式和新的消息中断方式,以满足不同设备的需要。
8. PCI Express 总线的差错处理和差错报告
PCI Express总线定义了三种错误报告方式:Completions、Poisoned Packet(又称为错误传递)和Error Message。这些错误类型可以通过设备控制寄存器中的相关位进行使能或者禁止,也可以通过设备状态寄存器相关位查询错误状态。
对于Completions错误,当Request在Completion阶段返回错误状态时,会通过Completion中的状态位向Request返回错误信息。
对于Poisoned Packet错误,当接收端收到一个已经被破坏的TLP数据包时,接收端会返回一个Poisoned
Packet错误,告知发送端该数据包已经被破坏。对于Error Message错误,当出现致命错误或者某些特定类型的非致命错误时,可以通过Error Message报告错误信息。
对于链路错误,一般发生在物理层与数据链路层通信的过程中。对于Downstream的设备,如果链路上发生了Fatal错误,此时该设备并不能够向Root报告错误。这种情况下,需要Upstream设备向Root来报告错误。
class PCIExpressDevice {- 控制寄存器: ControlRegister- 状态寄存器: StatusRegister+ 使能Completions错误()+ 禁止Completions错误()+ 使能PoisonedPacket错误()+ 禁止PoisonedPacket错误()+ 使能ErrorMessage错误()+ 禁止ErrorMessage错误()+ 查询错误状态(): ErrorStatus
}class DownstreamDevice {+ 向Root报告错误()
}class UpstreamDevice {+ 向Root报告错误()
}class RootComplex {- 错误报告信息: ErrorReport
}PCIExpressDevice --> ControlRegister
PCIExpressDevice --> StatusRegister
PCIExpressDevice --> ErrorStatus
PCIExpressDevice --> ErrorReport
DownstreamDevice --> UpstreamDevice
UpstreamDevice --> RootComplex
+-------------------+ +----------------+ +----------------+
| PCI Express | | Root Complex | | Device |
| | | | | |
| +---------------+ | Req to | +-------------+ | Req to | |
| | Endpoint |-----------> | | Downstream | |-----------> | |
| | Device | TLP | | Port/Link | | TLP | |
| +---------------+ | | +-------------+ | | |
| | | | | |
+-------------------+ +-----------------+ +----------------+
相关文章:
DP读书:鲲鹏处理器 架构与编程(六)PCI Express 总线
处理器与服务器:PCI Express 总线 PCI Express 总线1. PCI Express 总线的特点a. 高速差分传输b. 串行传输c. 全双工端到端连接d. 基于多通道的数据传输方式e. 基于数据包的传输 2. PCI Express 总线的组成与拓扑结构a. 根复合体b. PCI Express桥c. 功能单元 3. PCI…...
Pyqt5-开源工具分解功能(文本拖拽)
开源第四篇:功能实现之拖拽功能与配置文件。 写这个功能的初衷,是因为,每次调试我都要手动敲命令,太麻烦了,想偷个懒,所以直接给这功能加上了,顺便衍生出了另一个想法,配置文件自动填写相关数据。 先看个简单的拖拽功能: 很明显吧,还是比较便捷的。所以我们本章,就在…...
Java版B/S架构 智慧工地源码,PC、移动、数据可视化智慧大屏端源码
智慧工地是什么?智慧工地主要围绕绿色施工、安全管控、劳务管理、智能管理、集成总控等方面,帮助工地解决运营、管理方面各个难点痛点。在互联网的加持下促进项目现场管理的创新与发展,实现工程管理人员与工程施工现场的整合,构建…...
无涯教程-PHP - Session选项
从PHP7 起, session_start()()函数接受一系列选项,以覆盖在 php.ini 中设置的会话配置指令。这些选项支持 session.lazy_write ,默认情况下此函数为on,如果会话数据已更改,则会导致PHP覆盖任何会话文件。 添加的另一个…...
The Age of Data and AI: Challenges and Opportunities
Simply put Abstract: This paper examines the impact of the “Age of Data” on the field of artificial intelligence (AI). With the proliferation of digital technologies and advancements in data collection, storage, and processing, organizations now have ac…...
WPF 项目中 MVVM模式 的简单例子说明
一、概述 MVVM 是 Model view viewModel 的简写。MVVM模式有助于将应用程序的业务和表示逻辑与用户界面清晰分离。 几个概念的说明: model :数据,界面中需要的数据,最好不要加逻辑代码view : 视图就是用户看到的UI结构 xaml 文件viewModel …...
基于nginx禁用访问ip
一、背景 网络安全防护时,禁用部分访问ip,基于nginx可快速简单实现禁用。 二、操作 1、创建 conf.d文件夹 在nginx conf 目录下创建conf.d文件夹 Nginx 扩展配置文件一般在conf.d mkdir conf.d 2、新建blocksip.conf文件 在conf.d目录新建禁用ip的扩展配置文…...
【第三阶段】kotlin语言的内置函数let
1.使用普通方法对集合的第一个元素相加 fun main() {//使用普通方法对集合的第一个元素相加var list listOf(1,2,3,4,5)var value1list.first()var resultvalue1value1println(result) }执行结果 2.使用let内置函数对集合的第一个元素相加 package Stage3fun main() {//使用…...
【C++入门到精通】C++入门 —— 模版(template)
阅读导航 前言一、模版的概念二、函数模版1. 函数模板概念2. 函数模板定义格式3. 函数模板的原理4. 函数模版的实例化🚩隐式实例化🚩显式实例化 5. 函数模板的匹配原则 三、类模板1. 类模板的定义格式2. 类模板的实例化 四、非类型模板参数1. 概念2. 定义…...
ARM汇编【3】:LOAD/STORE MULTIPLE PUSH AND POP
LOAD/STORE MULTIPLE 有时一次加载(或存储)多个值更有效。为此,我们使用LDM(加载多个)和STM(存储多个)。这些指令有一些变化,基本上只在访问初始地址的方式上有所不同。这是…...
Python之Qt输出UI
安装PySide2 输入pip install PySide2安装Qt for Python,如果安装过慢需要翻墙,则可以使用国内清华镜像下载,输入命令pip install --user -i https://pypi.tuna.tsinghua.edu.cn/simple PySide2,如下图, 示例Demo i…...
【1day】复现泛微OA某版本SQL注入漏洞
目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现 一、漏洞描述 泛微e-cology是一款由泛微网络科技开发的协同管理平台,支持人力资源、财务、行政等多功能管理和移动办公。泛微OA存在SQL注入漏洞,攻击者利用Web应用程序对用户输入验证上的疏忽,在输入的数据…...
安卓系列机型-禁止卸载某个APP 防止误卸载软件 无需root权限
安卓系列机型-禁止安装某软件 防止“沉迷游戏的小孩”操作解析_安卓机器的博客-CSDN博客 上一期讲了如何禁止安装某个app。今天讲下如何禁止卸载某app。正好相反的操作。任何操作有利有弊。主要看使用者如何对待使用。 💔💔💔以腾讯的一款游…...
【算法系列篇】二分查找——这还是你所知道的二分查找算法吗?
文章目录 前言什么是二分查找算法1.二分查找1.1 题目要求1.2 做题思路1.3 Java代码实现 2.在排序数组中查找元素的第一个和最后一个位置2.1 题目要求2.2 做题思路2.3 Java代码实现 3.搜索插入位置3.1 题目要求3.2 做题思路3.3 Java代码实现 4.x的平方根4.1 题目要求4.2 做题思路…...
【前端从0开始】JavaSript——分支流程控制
流程控制 在任何一门程序设计语言中,都需要支持满足程序结构 化所需要的三种流程控制: ●顺序控制 ●分支控制(条件控制) ●循环控制 顺序控制:在程序流程控制中,最基本的就是顺序控制。程序会按照自上而下的顺序执行…...
Linux权限
Linux中一切皆文件,那么文件就应该有相对于的类型,而在Linux当中,类型不是直接看后缀来决定的。 -普通文件、文本、可执行、归档文件等d目录b块设备、block、磁盘c字符设备、键盘、显示器p管道文件s网络socket文件l链接文件 link 然后后面的九…...
PMP如何备考?学习方式这里有
预习阶段:强烈建议跟着习课视频学习(自己看书真的很难看懂),初步了解PMBOK,有个大致印象; 精讲阶段:这个时候就需要静下心来深入了解各个知识模块,不仅是看PMBOK,还要尽…...
【Java转Go】快速上手学习笔记(四)之基础篇三
目录 泛型内置泛型的使用切片泛型和泛型函数map泛型泛型约束泛型完整代码 接口反射协程特点WaitGroupgoroutine的调度模型:MPG模型 channel介绍语法:举例:channel遍历基本使用和协程一起使用案例一案例二 select...casemain.go 完整代码 文件…...
vue中form和table标签过长
form标签过长 效果: 代码: <el-form-item v-for"(item,index) in ticketEditTable1" :label"item.fieldNameCn" :propitem.fieldName :key"item.fieldNameCn" overflow"":rules"form[item.fieldName…...
java基础复习(第七日)
java基础复习(七) 1.MQ如何避免消息重复投递或重复消费? 在消息生产时,MQ 内部针对每条生产者发送到消息生成一个 inner-msg-id,作为去重的依据(消息投递失败并重传),避免重复的消息进入队列;…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
