【弹性计算】弹性裸金属服务器和神龙虚拟化(三):弹性裸金属技术
弹性裸金属服务器和神龙虚拟化(三):弹性裸金属技术
- 1.弹性裸金属技术背景
- 1.1 传统 KVM 虚拟化系统导致 CPU 计算特性损失
- 1.2 传统 KVM 虚拟化系统导致资源争抢不可避免
- 1.3 传统 KVM 虚拟化系统导致 I/O 性能瓶颈
- 2.弹性裸金属技术实现
- 2.1 VPC 和 EBS 云盘接入
- 2.2 实现大量弹性网卡(ENI)和 EBS 云盘设备接入
- 3.X-Dragon Hypervisor 基于神龙的软硬一体的虚拟化技术
- 3.1 自研虚拟 CPU 调度器 —— VOS
- 3.2 内存优化:内存分配器 VMEM 与用户态 QEMU 内存瘦身
- 3.3 虚拟化运行加速
- 3.4 极速启动
- 3.5 物理机 CPU 全供给虚拟机
1.弹性裸金属技术背景
2003 年,Xen 在 SOSP 发表 Xen and the Art of Virtualization,拉开了 x86 平台虚拟化技术的大幕。2006 年,AWS 发布 EC2(Elastic Compute Cloud
),同年发布 S3(Simple Storage Service
),拉开了公共云服务的大幕。EC2 的核心正是基于 Xen 虚拟化技术。虚拟化技术赋予了 EC2 核心产品价值 —— 弹性,同时虚拟化技术给网络虚拟化、存储虚拟化,和管控系统提供了业务部署点。
第一代虚拟化技术的特征是:Xen/KVM + 软件 network vSwitch + 软件 storage initiator + 管控等 All on Xeon。这代技术的痛点和思考,如下图所示。
1.1 传统 KVM 虚拟化系统导致 CPU 计算特性损失
众所周知,IaaS 公共云技术的核心是 Intel 至强处理器 VT 等 硬件辅助虚拟化技术(Hardware-assisted virtualization
),配合主流虚拟化系统软件(KVM / Xen / VMware ESXi 等),实现了 IaaS 弹性计算;客户则是通过 ECS(或者 AWS EC2)购买虚拟机(VM)形式的计算资源。
得益于高度成熟的虚拟化技术,VM 形式的计算资源 “几乎” 等价于客户线下的物理服务器资源,但是 “几乎” 并不是 “完全”。一个典型的案例就是 Intel 至强处理器的 VT 硬件辅助虚拟化能力会被公共云服务提供商的虚拟化系统 “消费掉”,客户无法在公共云 VM 实例中再次部署虚拟化系统,致使传统 OpenStack 和 VMware based workload 无法在公共云部署。
客户希望用一套 OpenStack / VMware 统一管理 公共云线上资源 和 专有云线下资源,同时在控制面和数据面打通线上线下资源,在兼顾专有云数据安全、法律合规的基础上,充分利用公共云计算资源的弹性能力,但是由于 Intel 至强处理器 VT 硬件辅助虚拟化能力 “被消费”,使得此种 混合云技术 很难在公共云实现。云原生安全容器创新依赖 Intel VT 硬件辅助虚拟化能力输出,这是传统虚拟化无法解决的问题。
1.2 传统 KVM 虚拟化系统导致资源争抢不可避免
以传统的 KVM 虚拟化系统为例,双路 Skylake(96 个 HT)计算资源的虚拟化典型部署情况是:有 8 个 HT 部署网络虚拟化 vSwitch 和存储虚拟化,对外售卖 88 个 HT 作为 vCPU 计算资源。我们需要注意到,对外售卖的 88HT vCPU 计算资源和 8 HT 网络 / 存储虚拟化是部署在同一组 Skylake CPU 上的,那么如下共享资源争抢是不可避免的。
- CPU DDR 带宽、LLC 等共享资源的争抢。在机头网络带宽迅速提升的当下,DDR 带宽、LLC 等资源争抢现象愈发突出。
- 半虚拟化(Para-virtualized)I/O 设备模型等资源争抢引入售卖 CPU 抖动和售卖 I/O 抖动。
- 存储和网络等 I/O 内部层级化 HQoS 难于实施。一般而言,层级化 HQoS 是解决资源争抢的有效手段,电信级网络设备一般会部署 HQoS 进行资源调度,而 HQoS 的典型部署方法需要通过芯片实现。
1.3 传统 KVM 虚拟化系统导致 I/O 性能瓶颈
传统 KVM 虚拟化系统由(计算虚拟化)QEMU-KVM + (网络虚拟化)DPDK based vSwitch + (存储虚拟化)SPDK based I/O initiator 构成。
在 Intel 引入 VT 硬件虚拟化支持后,配合 KVM、Xen 等虚拟化系统软件,由 CPU 指令处理的数据面和 KVM 等虚拟化系统软件形成了控制面及异常处理路径,此种软硬件协同设计既实现了 CPU 和内存虚拟化的数据路径的最小开销,又保留了 KVM 控制路径和异常处理路径的高度灵活性。
同处于数据路径的存储虚拟化和网络虚拟化虽然通过 DPDK 和 SPDK 等技术接近了软件优化的技术极限,但是仍然无法和芯片的加速性能媲美。特别是在网络吞吐向 100GbE 演进的过程中,交换网络的带宽能力和 Intel 至强处理器的处理能力间的差距逐渐拉大,在传统 KVM 虚拟化系统下,通过 DPDK、SPDK 等纯软件进行 I/O 性能优化的瓶颈日渐凸显。
2.弹性裸金属技术实现
第一代虚拟化技术的业务痛点,催生了第二代虚拟化技术的产生,弹性裸金属产品也应运而生。那么第二代虚拟化技术具备哪些特征呢?
- 全部 I/O 设备通过 VT-d 设备直通模式进入 VM,以此减少 para-virtualization I/O 半虚拟化开销。
- 随着 VT-d 设备直通的引入,网络虚拟化和存储虚拟化需要一个新的业务部署点。
- VT-d 设备直通引入后,SR-IOV 等技术却无法达到和传统 QEMU PV 设备一样的灵活性,I/O 硬件虚拟化催生 Intel scalable IOV 的业务诉求。
- 随着存储虚拟化和网络虚拟化新的业务部署点的产生,这个业务部署点很显然需要针对计算、网络、存储、安全等 IaaS 核心业务部署定制化芯片加速。
- 同时支持传统 VM、弹性裸金属服务器、安全容器等 IaaS 最新业务诉求。
简而言之,Hypervisor 的主要组件全部下沉进入一个定制计算节点,该定制计算节点完成 I/O 设备虚拟化、网络虚拟化、存储虚拟化和管控部署,以及安全特性部署等。
而主机侧,针对公共云的需求,从计算和内存原来的 QUME + KVM 方式,经过高度定制和瘦身后,降低了主机资源占用并提升计算服务质量,演化到了裸金属架构。
第二代虚拟化技术使弹性裸金属的产品落地成为可能。阿里云在 2017 年 10 月举行的杭州云栖大会上正式发布弹性裸金属产品,同年 11 月,AWS reinvent 发布 EC 2 版本弹性裸金属产品。中美公共云服务提供商可以说在弹性裸金属的产品定义、产品适用场景和技术上殊途同归。弹性裸金属的核心产品技术逻辑:通过技术创新,使普通物理服务器具备虚拟机的弹性和使用体验。
正是有了这个逻辑,我们可以推演出技术创新的突破点:通过软硬一体化的技术手段,让普通物理服务器能够无缝接入云平台的管控系统、VPC 云网络和 EBS 云盘。
2.1 VPC 和 EBS 云盘接入
我们知道在虚拟化技术中,虚拟机是通过 Virtio 实现网络和存储 I/O 设备的;同时,我们注意到,Virtio 这个半虚拟化设备模型实际上是严格按照 “真实” PCIe 设备规范的定义而实现的 I/O 设备。也就是说,Virtio 半虚拟化设备完全可以通过芯片实现。
在通过芯片实现 Virtio 的时候,考虑到 VPC 和 EBS 云盘实现的复杂度,我们采用了新的模式:让芯片透传 PCIe TLP 包到可编程处理器,然后通过可编程处理器复用 QEMU 已有的成熟的 Virtio 后端代码。此种模式能够最大限度地保持既有的虚拟化架构,做到云平台管控系统、VPC 系统、EBS 云盘系统的 “零修改”。
2.2 实现大量弹性网卡(ENI)和 EBS 云盘设备接入
VT-x/KVM 虚拟化技术具有天然技术优势,支持大量网络和存储设备。而弹性裸金属产品的核心出发点就是要兼具虚拟机和传统物理机的优点。虚拟机对大量网络设备和存储设备的支持,必须在弹性裸金属产品中予以实现。
在多种规格的网卡和存储 PCIe I/O 设备接入时,根据 PCIe 规范有两个方法:
- 1️⃣ 通过多级 PCIe switch 扩展,实现大量 PCIe switch downstream port,然后每个 PCIe switch downstream port 挂载一个 PCIe I/O 设备;
- 2️⃣ 通过 PCIe SR-IOV 技术,支持大量 PCIe virtual function(VF)设备。
进一步对比虚拟机 I/O 设备,我们可以看到设备的热插拔、Guest OS 的零侵入是公共云 IaaS 产品的刚需。只有通过多级 PCIe switch 扩展模式,才能通过 PCIe native hotplug 技术标准,实现上述和虚拟机一致的设备热插拔和 Guest OS 零侵入。产品需求明确后,我们创新性地通过芯片 RTL 实现了全球第一个片上多级 PCIe switch 扩展,当前最多能够支持 63 个设备,以此实现大数量规格的网络 ENI 和存储 EBS 云盘PCIe I/O 设备接入;同时由于支持原生 PCIe 原生热插拔能力,保证了 Guest OS 的零侵入,以及客户在 Open API 和控制台等方面和虚拟机一致的使用体验。
3.X-Dragon Hypervisor 基于神龙的软硬一体的虚拟化技术
在阿里云神龙硬件平台下,虚拟化架构也做了相应的升级,使计算虚拟化部分的架构更加清晰简捷,让虚拟机能提供接近物理机的性能。如下图所示,神龙虚拟化架构的主要特点是:
- I/O 链路从传统的通过软件实现转变为通过硬件和直通设备实现;
- 存储虚拟化、网络虚拟化都在 MOC 卡上实现;
- 同时将管控系统、监控程序等都下沉到 MOC 卡上。
- 在提供计算服务的物理机上,只运行自己裁剪的 Linux 操作系统和轻量化的虚拟机监控器。
神龙虚拟化架构比起传统的 KVM 虚拟化的关键优化技术点简要描述如下。
3.1 自研虚拟 CPU 调度器 —— VOS
VOS
(VM-Oriented Scheduler
)是面向虚拟机的调度器,是阿里云在神龙平台上自研的调度器,减少了虚拟 CPU 调度开销,同时将其他控制面的作业调度给虚拟 CPU 带来的争抢下降一个数量级研发的更加稳定和高效的计算虚拟化产品。如下图所示,VOS 调度器实现的是非公平调度(与内核中的 CFS 调度器不同),让虚拟 CPU 线程具有更高执行优先级,保证客户购买的虚拟机的计算性能,而控制面的作业调度执行被安排在预先设定的一个较低优先级和预设时间片中投机执行,而且控制面的作业是可以被内核态抢占的。
通过 VOS 调度器,虚拟 CPU 的调度延迟低到毫秒级;通过 ping flood
来测试网络 ping
的延时抖动,抖动下降到了百万分之一左右(即 ping
一百万个报文只遇到 1 个报文延迟的比例比均值明显偏大),抖动比之前的架构下降了两个数量级。在物理机上执行的控制面的作业包括:虚拟机生命周期管理、QEMU 控制线程、写日志、监控执行、包括热升级 / 热迁移在内的运维操作,在 VOS 的管理下,正在运行的虚拟 CPU 的干扰被控制在一个非常低的水平,虚拟机的计算稳定性大幅提升。
3.2 内存优化:内存分配器 VMEM 与用户态 QEMU 内存瘦身
内存分配器 VMEM 是阿里云研发的用于虚拟机内存分配的分配器,可以大幅减少内核维护的内存页表等开销(开销从以前的 1.5 % 1.5\% 1.5% 左右下降到 0.1 % 0.1\% 0.1% 左右),支持 1GB 的大页进一步减少 EPT 开销,实现了通过 vMCE 对硬件错误的内存页进行隔离。
在内存方面,我们通过 QEMU 对其进行瘦身,将单个虚拟机的 QEMU 进程内存开销降低到 5MB 以内,通过全新设计的用户态内存分配器避免了内存碎片,同时对不常用的内存资源进行延迟分配。
通过这两种内存优化手段,神龙虚拟化的架构比传统 KVM 虚拟化节省了约 10%的内存。
3.3 虚拟化运行加速
通过硬件加速虚拟机中的 HLT 和 MWAIT 指令,使其唤醒延迟与物理机几乎一样。同时将定时器进行硬件虚拟化,在虚拟机中访问定时器不会再触发 VMEXIT,从而提升虚拟机性能。通过这些优化,进程调度性能得到了较大提高,下图的调度延迟实测数据展示的是在某次测试中,调度两百万个进程,并统计每次调度的延迟的结果。可以看到,延迟有 15 % 15\% 15% 的下降。图中的 g5.4xlarge
实例是之前的 KVM架构的 ECS 虚拟机实例规格,g6.4xlarge
是神龙硬件平台下经过优化的 ECS 虚拟机实例规格。
3.4 极速启动
为了让虚拟机加速启动,我们对神龙虚拟化架构也做了很多优化。首先是资源的快速分配,包括实现多线程的初始化、虚拟机内存页分配时的批处理化。同时对虚拟机依赖的固件进行裁剪、重构、优化,使虚拟机实现毫秒级加载。我们还对一些特殊的应用场景应用了内部称为 vmfork
的技术,让虚拟机能实现秒级的快速复制。
3.5 物理机 CPU 全供给虚拟机
在传统的 KVM 虚拟化架构下,宿主机的 CPU 资源是不可能全部供给虚拟机使用的,一般还要预留 CPU 核,用于网络虚拟化软件、存储虚拟化软件、管控系统、监控脚本等的计算资源开销。在神龙架构下,网络虚拟化和存储虚拟化都通过硬件虚拟化的方式下沉到一张 MOC 卡上,同时管控系统和绝大部分监控脚本都下沉到 MOC 卡上运行,这样物理机 CPU 资源就可以全部通过虚拟化的方式分配给虚拟机使用。经过评估,通过下沉这部分 CPU 开销到 MOC 卡上,物理机的 CPU 资源利用率能提高 10 % 10\% 10% 左右。
相关文章:

【弹性计算】弹性裸金属服务器和神龙虚拟化(三):弹性裸金属技术
弹性裸金属服务器和神龙虚拟化(三):弹性裸金属技术 1.弹性裸金属技术背景1.1 传统 KVM 虚拟化系统导致 CPU 计算特性损失1.2 传统 KVM 虚拟化系统导致资源争抢不可避免1.3 传统 KVM 虚拟化系统导致 I/O 性能瓶颈 2.弹性裸金属技术实现2.1 VPC…...

【MySQL】(2) 库的操作
SQL 关键字,大小写不敏感。 一、查询数据库 show databases; 注意加分号,才算一句结束。 二、创建数据库 {} 表示必选项,[] 表示可选项,| 表示任选其一。 示例:建议加上 if not exists 选项。 三、字符集编码和排序…...

Hyper-V -docker-vmware 三者的关系
1. Docker 正常运行,需要启动Hyper-V ,打开 hypervisorlaunchtype 2.VMware 正常时,需要关闭Hyper-V ,关闭 hypervisorlaunchtype 2.1资源管理器->CPU 里要开启虚拟化 2.2 服务-停掉HV服务 2.3 控制面板 不勾选 2.4 …...

IP-----双重发布
目录 6.双重发布 1.重发布的作用 2.部署条件 1.必须存在ASBR 2.种子度量值 3.重发布的规则 4.重发布的数量 5.重发布的场景 1.场景和规则 2.直连和静态 3.动态RIP 4.动态OSPF 5.更改开销值 6.重发布的问题1 7.重发布的问题2 1.流量 2.前缀列表 3.偏移列表 4…...

【新立电子】探索AI眼镜背后的黑科技,FPC如何赋能实时翻译与语音识别,点击了解未来沟通的新方式!
在全球化的今天,语言障碍成为人们沟通与交流的一大难题。AI眼镜作为一种新兴的智能设备,正在通过实时翻译与语音识别功能,打破语言壁垒,为人们提供无缝沟通的解决方案。FPC在AI眼镜中的应用,为实时翻译与语音识别功能的…...
LeetCode 热题 100_寻找两个正序数组的中位数(68_4_困难_C++)(二分查找)(先合并再挑选中位数;划分数组(二分查找))
LeetCode 热题 100_寻找两个正序数组的中位数(68_4) 题目描述:输入输出样例:题解:解题思路:思路一(先合并再挑选中位数):思路二(划分数组(二分查找…...
Java多线程与高并发专题——深入ReentrantReadWriteLock
深入ReentrantReadWriteLock 读写锁出现原因 synchronized和ReentrantLock都是互斥锁。如果说有一个操作是读多写少的,还要保证线程安全的话。如果采用上述的两种互斥锁,效率方面很定是很低的。在这种情况下,咱们就可以使用ReentrantReadWr…...

【Python 语法】算法合集
查找二分查找代码大 O 表示法 广度优先搜索代码 狄克斯特拉算法 递归递归调用栈 分而治之(divide and conquer,D&C)贪心教室调度问题背包问题集合覆盖问题 动态规划背包问题旅游行程最优化 遇到问题时, 如果不确定该如何 高效…...

[STM32]从零开始的STM32 BSRR、BRR、ODR寄存器讲解
一、前言 学习STM32一阵子以后,相信大家对STM32 GPIO的控制也有一定的了解了。之前在STM32 LED的教程中也教了大家如何使用寄存器以及库函数控制STM32的引脚从而点亮一个LED,之前的寄存器只是作为一个引入,并没有深层次的讲解,在教…...

C++ ++++++++++
初始C 注释 变量 常量 关键字 标识符命名规则 数据类型 C规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存 整型 sizeof关键字 浮点型(实型) 有效位数保留七位,带小数点。 这个是保…...
C# 牵手DeepSeek:打造本地AI超能力
一、引言 在人工智能飞速发展的当下,大语言模型如 DeepSeek 正掀起新一轮的技术变革浪潮,为自然语言处理领域带来了诸多创新应用。随着数据隐私和安全意识的提升,以及对模型部署灵活性的追求,本地部署 DeepSeek 成为众多开发者和…...

phpstudy安装教程dvwa靶场搭建教程
GitHub - digininja/DVWA: Damn Vulnerable Web Application (DVWA) Dvwa下载地址 Windows版phpstudy下载 - 小皮面板(phpstudy) 小皮下载地址 1选择windows 版本,点击立即下载 下载完成,进行解压,注意不要有中文路径 点击.exe文件进行安装…...

最新版本SpringAI接入DeepSeek大模型,并集成Mybatis
当时集成这个环境依赖冲突,搞了好久,分享一下依赖配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instan…...
FastAPI 学习笔记
简介: FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 并基于标准的 Python 类型提示。 关键特性: 快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic&…...

Elasticsearch:过滤 HNSW 搜索,快速模式
作者:来自 Elastic Benjamin Trent 通过我们的 ACORN-1 算法实现,探索我们对 Apache Lucene 中的 HNSW 向量搜索所做的改进。 多年来,Apache Lucene 和 Elasticsearch 一直支持使用 kNN 查询的过滤搜索,允许用户检索符合指定元数据…...

华为hcia——Datacom实验指南——STP工作基本原理及STP/RSTP基本功能配置
什么时候需要用到STP 在二层交换网络中,为了避免环路产生。 什么是STP STP生成树协议,是用来在冗余链路上消除二层环路。在众多交换机中,需要设置出一个根桥,其余的交换机称为非根桥,根桥是整个交换网络的核心&…...

Vue核心知识:动态路由实现完整方案
在Vue中实现动态路由,并结合后端接口和数据库表设计,是一个复杂的项目,需要多个技术栈和步骤的配合。以下将详细描述整个实现过程,包括数据库设计、后端接口设计、前端路由配置以及如何实现动态路由的功能。 目录 一、需求分析二…...

【Maui】系统找不到指定的文件Xamarin.Android.Aapt2.targets
文章目录 前言一、问题描述二、解决方案三、软件开发(源码)四、项目展示 前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动和桌面应用。 使用 .NET MAUI,可从单个共享代码库开发可在 And…...

通过返回的key值匹配字典中的value值
需求 页面中上面搜索项有获取字典枚举接口,table表格中也有根据key匹配字典中的value 方案一 需要做到的要求 这里上面下拉列表是一个组件获取的字典,下面也是通过字典匹配,所以尽量统一封装一个函数,每个组件保证最少变动tabl…...

【Linux第一弹】Linux基础指令(上)
目录 1.ls指令 1.1 ls使用实例 2.pwd指令 3.cd指令 3.1 cd使用实例 4.touch指令 4.1touch使用实例 5.mkdir指令 5.1mkdir使用实例 6.rmdir指令和rm指令 6.1 rmdir指令使用实例->: 6.2 rm指令使用实例 7.man指令 8.cp指令 8.1 cp 使用实例 9.mv指令 9.1mv使用…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...