Flink介绍——实时计算核心论文之S4论文总结
PE对象的构成与功能
我们先来看下S4是怎么抽象流式计算的。
S4将所有的计算过程抽象为一个个Processing Element(处理元素)对象,简称为PE对象。
每一个PE对象,都有四部分组成,分别是:
-
功能(Functionality):PE对象的核心是其功能实现,这体现在类中定义的业务逻辑函数以及为该类配置的参数。
-
事件类型(types of events):PE能够处理的事件类型,决定了它能接收和处理哪些类型的事件。
-
事件的键(keyed attribute):PE能够处理的事件的键,用于事件的路由和分发。
-
事件的键对应的值(value):PE处理的事件的键对应的值,用于事件的具体处理逻辑。
流式计算的逻辑模型
这些PE对象会组成一个有向无环图(DAG)。
DAG的起点是一些特殊的无键PE对象,它们负责接收外部发送来的事件流,这些外部发送过来的事件流,其实就是一条条的消息。
而这些无键PE会解析对应的消息,变成一个个事件。然后给每个事件打上事件类型、事件的Key和事件的Value三个信息,然后将事件发送出去。
接着下游的其他PE对象会根据自己定义的事件类型和能处理的键来接收对应的消息,并进行处理。如果系统中没有对应的键的PE,系统会创建新的PE对象。处理数据的PE对象可以选择处理完后立刻发送新的事件,或者在内部维护状态,处理一定数量的消息或经过固定时间间隔后发送消息。
最后在DAG的终点,是一系列负责发布(Publish)最终计算结果的PE对象。这些对象可以设置发布的频率,如每收到一个事件就发送,或者在接收到一定数量的事件或经过特定时间间隔后发送。
这么来描述,可能整个过程有点过于抽象,我们还是来一起看一看论文里图一的示例。这个例子,是用来统计整个系统里,出现得最多的K个单词,也就是Top K,它的整个DAG的结构是这样的:
-
首先,在DAG的起始节点,是一个 QuoteSplitterPE,这个PE也是一个无键PE。
-
它负责接收外部发送来的句子,然后分割成一个个单词,接着会统计单词在句子里面出现的次数。
-
然后,这个PE会把每个单词的出现次数,作为一个WordEvent发送出去。对应的Event的Key就是(Word,具体单词)的这么一个组合(Tuple)。而对应的Event的值,就是(Count,出现次数)的这么一个组合(Tuple)。
-
-
第二层里,是一系列叫做 WordCountPE 的PE对象。它在系统里面申明,我只接收WordEvent。然后每个不同的单词,都会有一个对应的PE对象。所以可以想象,整个系统中会有海量的PE对象。
-
它的逻辑也很简单,上游的PE,会把相同单词的WordEvent都发送到同一个PE,那么这个PE里,就可以统计到这个单词出现的总的次数。
-
每当收到一个事件,这个单词的出现次数就会更新,对应的它就会向下游,发送一个UpdatedCountEvent,也就是更新单词计数的事件。
-
这个事件里,对应的Key是(Sort,N)这样一个组合,每一个PE对象里的N都是随机的,但是固定不变的。这个组合是为了下一层的负载均衡,我们可以自己去设定N这个参数,N越大,意味着下游的PE对象越多,负载就会分配到更多不同的对象里去计算的。而对应的值,则包括了对应的单词是什么,以及对应的单词的出现次数。也就是((Word,具体单词), (Count,出现次数)) 这么一个组合。
-
-
第三层里,则是一系列叫做 SortPE 的对象。它的作用则是接收上游不同单词的出现次数,然后在内部进行排序。最后输出自己内部排序的Top K,再给到下游。本质上,它相当于是所有单词的某一个分区的数据。这个分区,包含了一部分单词的所有数据。我们前面设定了N是几,我们就会有几个SortPE的对象。
-
给到下游的事件,叫做PartialTopkEvent,看名字你就知道它包含的信息,就是一个部分数据的Top K。
-
所有SortPE的对象,输出的消息的Key都是相同的,因为为了获得全局的排序,它们需要发送给同一个PE对象。在这里,这个Key就被写死成了(topk,1234) 这么一个组合。而Value,则是K个(单词,出现次数)的集合。
-
-
而整个DAG的终点,则是唯一的一个 MergePE。它的作用,就是接收PartialTopkEvent,然后在内部进行一次归并,选出全局的TopK。并且最终,它还需要把对应的数据,写入到外部其他的存储系统,比如数据库里,供其他的应用读取。
S4这个把整个数据处理流程,变成一个有向无环图的设计,也是后续所有流式处理系统都采用的一个解决方案。所有的数据,变成了事件流,而开发人员只需要做两件事情:
-
第一,是设计整个DAG应该是什么样子的。
-
第二,是实现这个当中每一个节点的业务逻辑代码。
而开发人员,不需要关心数据是在哪里被处理的。这些底层处理都由S4来负责。
抽象计算模型的设计思路
其实S4的计算模型设计思路,和我们之前看过的HDFS、MapReduce 等框架类似。PE其实和Map/Reduce函数一样,只是一个抽象的概念。不过S4的系统设计,要更加激进一点,那就是 S4选择了一个无中心的,完全对称的架构。
S4 没有所谓的Master节点,如果一定要说有一个中心化的地方的话,S4依赖于Zookeeper,也就是一个类似于Chubby这样的分布式锁系统。S4的所有服务器,都会作为一个处理节点PN(ProcessingNode),注册在Zookeeper上。具体如何分配负载,是由各个节点协商决定的,而不是由一个中心化的Master统一分配。
每一个处理节点,都是相同的,它由上下两部分组成。
上面部分,是实际的业务处理逻辑模块:
-
它通过Event Listener,监听外部发送过来的消息,转发给对应的PE对象。
-
PE对象的所有输出结果,都发送给Dispatcher,让Dispatcher确定应该发送给哪些PE里。
-
实际的消息发送,会由Dispatcher交给Emitter,对外发送出去。
业务处理模块里,只会确定对应的消息发送,应该发送给哪一个逻辑上的PE,实际具体发送到哪一台物理节点,则是由下面的通信层模块来决定的。
这个模块主要解决这样几个问题:
-
首先是具体的路由,也就是Event要去的某一个逻辑PE,到底在哪台物理服务器上,是由通信层模块来找到并且发送出去的,上层的业务处理流程不需要知道。
-
其次是负载均衡,不同的单词,更新的频率可能不一样。所以不同的处理节点的负载也会不一样。当有一个新的单词出现的时候,我们需要判断新的PE应该放到哪一个节点上去。
-
然后就是底层的容错恢复机制了,当有特定节点挂掉的时候,我们需要在其他的节点上,恢复原先这个节点被分配的PE。
-
最后就是实际的传输协议,S4是一个“插件式”的架构,也就是底层的传输协议也是可以切换的。S4既支持通过TCP发送消息,确保消息能够发送成功,也支持通过UDP发送消息,来支持更大的吞吐量。
这种屏蔽了底层复杂实现,提供抽象出简单的计算模型供用户以更低的门槛去使用的思路特别常见,在S4框架中,开发人员只需要关注PE这个纯粹的业务逻辑层面。至于计算在哪一台服务器上发生,各个节点之间是怎么通信的,开发人员完全不需要关心。
S4的局限
S4虽然在流式计算领域迈出了重要的一步,但其设计上的不足也暴露了它在实际应用中的局限性。这些问题为后续流式数据处理系统的改进提供了方向,推动了该领域的进一步发展。
1. 海量对象的问题
S4的设计中,每个处理数据的Key都需要一个独立的对象。这种设计虽然能够灵活地处理不同的Key,但也导致了系统中存在海量的对象。一个Key如果只出现一次,之后再也不出现,也会占用内存。
为了解决这个问题,S4引入了TTL(Time to Live)机制,定期清理掉不再需要的Key,从而释放内存资源。
2. 缺乏时间窗口的概念
在实时数据处理中,时间窗口是一个非常重要的概念,例如统计“过去五分钟的下单量”或“过去一小时的完单量”,这样有一个时间范围的数据。然而,S4的设计中并没有内置时间窗口的概念。这意味着开发者需要在PE(Processing Element)的代码中自行维护或实现时间窗口逻辑,这显著增加了开发的复杂度和难度。
3. 容错处理的不足
S4的容错机制过于简单。当某个计算节点挂掉时,系统就重新启动一个新的节点来承担其工作。然而,原先节点中PE维护的状态信息会丢失,这意味着系统无法知道当前的统计信息或处理到哪些事件。对应的解决方案是退回到离线批处理数据,但这显然违背了流式处理的初衷,只能作为一种权宜之计。
4. 不支持动态扩容
S4作为一个分布式系统,却不支持真正的动态扩容。在论文的假设中,S4假设运行中的集群不会增加或减少节点。这意味着当负载快速上升时,S4的策略是随机丢弃一些数据,而不是通过增加硬件来解决问题。这种策略本质上是对数据进行了采样,而不是真正通过扩展资源来应对负载变化。
总结
S4的设计为大数据的流式处理迈出了重要的一步,但其存在的问题也为后续流式数据处理系统的改进提供了方向。后续的流式计算框架如Storm、Kafka、Flink等,在借鉴S4优点的基础上,对上述问题进行了优化和改进,推动了流式计算技术的进一步发展。
下面我们梳理一下针对S4的论文总结出来的优缺点:
S4框架的优点
-
实时性:S4能够进行低延时的“实时”数据处理,满足了业务对实时数据反馈的需求,如Yahoo通过S4及时获取广告和搜索数据的反馈,以及进行在线的A/B测试。
-
易用性:开发人员只需实现Processing Element(PE)的业务处理逻辑,无需关心分布式系统的底层细节,如数据分发、计算节点调度及容错恢复等,降低了开发门槛。
-
灵活性:S4借鉴了MapReduce和Actors Model,结合了两者的优点,实现了更灵活和高效的数据处理。
-
高效处理机制:S4大量使用本地内存而非磁盘IO,提高了数据处理速度,满足了实时性要求。
S4框架的不足
-
海量对象问题:每个处理数据的Key都需要一个独立的对象,导致系统中存在海量的对象,增加了内存占用。S4通过给Key设定TTL,定期清理掉不再需要的Key来缓解这个问题。
-
缺乏时间窗口概念:S4没有内置时间窗口的概念,无法直接满足如“过去一分钟的热搜”等有时间范围的统计需求,开发者需自行在PE代码中维护或实现时间窗口逻辑,增加了开发难度。
-
容错处理简单:S4的容错机制仅能在计算节点挂掉时重新启动新节点承担工作,但原先节点中PE维护的状态信息会丢失,且对节点间的数据传输没有全链路的传输保障。
-
不支持动态扩容:S4不支持真正的动态扩容,在负载快速上升时,其策略是随机丢弃一些数据而非通过增加硬件来解决问题。
相关文章:
Flink介绍——实时计算核心论文之S4论文总结
PE对象的构成与功能 我们先来看下S4是怎么抽象流式计算的。 S4将所有的计算过程抽象为一个个Processing Element(处理元素)对象,简称为PE对象。 每一个PE对象,都有四部分组成,分别是: 功能(F…...
第二十四章:Python-folium库实现中国地图绘制
一、folium库简介 hchinamap库是一个专门用于绘制中国地图的R包,它通过与Highmaps图表库的结合,提供了一种简单的方式来绘制中国及其各省市自治区的地图。虽然hchinamap库是为R语言设计的,但在Python中也可以通过类似的库(如matpl…...
云巅之上:数字文明的重构与超越
序章:算力新纪元 2024年初春,当SpaceX的星舰将首批云计算节点送入近地轨道时,地球上的数字原住民们正通过云端AI助手规划着一天的行程。这场静默的革命已悄然进入新阶段——云计算不再只是工具,而是成为数字文明的"第六元素…...
蓝桥杯高频考点——高精度(含C++源码)
高精度 前言高精度加法例题思路及代码solution 1(初阶版 40分)solution 2(完全体 AC) 高精度乘法例题思路及代码solution 1(TLE 但是代码很清晰)solution 1的问题solution 2(优化 AC)…...
程序化广告行业(52/89):程序化创意深度剖析
程序化广告行业(52/89):程序化创意深度剖析 大家好!我一直对程序化广告领域充满热情,在学习过程中发现其中有很多有趣又实用的知识。今天写这篇博客,就是希望能和大家一起学习进步,深入探索程序…...
selenium和pytessarct提取古诗文网的验证码(python爬虫)
代码实现的主要功能: 浏览器自动化控制 验证码图像获取与处理 OCR验证码识别 表单自动填写与提交 登录状态验证 异常处理与资源清理 1. 浏览器初始化与页面加载 driver webdriver.Chrome() driver.get("https://www.gushiwen.cn/user/login.aspx?fro…...
封装可拖动弹窗(vue jquery引入到html的版本)
vue cli上简单的功能,在js上太难弄了,这个弹窗功能时常用到,保存起来备用吧 备注:deepseek这个人工智障写一堆有问题的我,还老服务器繁忙 效果图: html代码: <div class"modal-mask&qu…...
JavaScript重难点突破:期约与异步函数
同步和异步 同步(Synchronous) 定义:任务按顺序依次执行,前一个任务完成前,后续任务必须等待。 特点:阻塞性执行,程序逻辑直观,但效率较低 异步(Asynchron…...
Spring事务的传播机制
目录 Spring 中事务的实现编程式事务(了解即可):声明式事务(利用注解自动开启和提交事务):事务回滚注意事项: Spring 事务传播机制:1.Propagation.REQUIRED:7.Propagation.NESTED:Propagation.NESTED和1.Pr…...
LlamaIndex实现RAG增强:融合检索(Fusion Retrieval)与混合检索(Hybrid Search)
🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创…...
什么是向量搜索Vector Search?
🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创…...
【接口重复请求】axios通过AbortController解决页面切换过快,接口重复请求问题
处理网络请求时,我们经常会遇到需要中途取消请求的情况,比如用户在两个tab之间反复横跳的场景,如果每个接口都从头请求到结束,那必然会造成很大的服务压力。 AbortController是一个Web API,它提供了一个信号对象&…...
GitHub与Gitee各是什么?它们的区别与联系是什么?
李升伟 整理 GitHub 介绍 GitHub 是一个基于 Git 的代码托管平台,主要用于版本控制和协作开发。它支持多人协作,提供代码托管、问题跟踪、代码审查、项目管理等功能。GitHub 是全球最大的开源社区,许多知名开源项目都在此托管。 主要功能&…...
OpenCV图像形态学:原理、操作与应用详解
一、引言 图像形态学(Image Morphology)是图像处理领域的一个重要分支,它基于集合论、格论、拓扑学和随机函数理论,主要用于分析和处理图像的几何结构。形态学操作通过特定的结构元素(Structuring Element)…...
ubuntu git cola gui
直接的方法, samba, win 里用 tortoiseSVN 需要先在命令行,运行 git 命令,看到操作提示, 按照提示做 然后右键看 git diff 其它的方法 linux下可视化git工具git-cola安装与使用(HTTP方式)_git…...
RTX5080 安装torch,torchvision ,torchaudio 指南
一、前置准备 5080 显卡 是sm120 架构,只有torch的preview版本可以使用,而且该版本仅支持cuda12.8. 请你放弃下载以及使用低版本cuda cudnn torch 的想法。 请你学习conda 创建环境,激活环境,在虚拟环境里使用pip ,…...
ubuntu开发mcu环境
# 编辑 vim或者vscode # 编译 arm-none-eabi # 烧写 openocd 若是默认安装,会在/usr/share/openocd/scripts/{interface,target} 有配置接口和目标版配置 示例: openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg 启动后,会…...
《UNIX网络编程卷1:套接字联网API》第5章 TCP客户服务器程序示例
《UNIX网络编程卷1:套接字联网API》第5章 TCP客户/服务器程序示例 5.1 本章目标与示例程序概述 本章通过一个完整的TCP回射(Echo)客户/服务器程序,深入解析TCP套接字编程的核心流程与关键问题。示例程序的功能为:客户…...
花洒洗澡完毕并关闭后过段时间会突然滴水的原因探究
洗澡完毕后的残留水 在洗澡的过程中,我们通常会使用到大量的水。这些水会通过花洒管子到达花洒顶喷流出。由于大顶喷花洒的喷头较大,关闭后里面的存水会更多。 气压失衡后的滴水 当花洒关闭后,内部的水管和花洒头中仍存有一定量的水。由于…...
子组件使用:visible.sync=“visible“进行双向的绑定导致该弹窗与其他弹窗同时显示的问题
问题描述:最近写代码时遇到了一个问题:点击A弹窗后关闭,继续点击B弹窗,这时会同时弹窗A、B两个弹窗。经过排查后发现在子组件定义时使用了:visible.sync"visible"属性进行双向的数据绑定 <template> <el-dial…...
TTL 值 | 在 IP 协议、ping 工具及 DNS 解析中的作用
注:本文为 “TTL” 相关文章合辑。 未整理去重。 如有内容异常,请看原文。 TTL 值的意义 2007-10-18 11:33:17 TTL 是 IP 协议包中的一个值,用于标识网络路由器是否应丢弃在网络中停留时间过长的数据包。数据包可能因多种原因在一定时间内…...
代码调试:VS调试实操
1.什么是BUG? BUG原意是“虫子”,在计算机领域是指未被发现的错误,又叫程序漏洞 2.什么是调试? 当你在写完代码时需要去找代码中的问题,这个过程就叫调试 我们必须承认有这个问题并且去修复问题,可以透…...
IGMP(Internet Group Management Protocol)与组播技术深度解析
一、组播技术核心概念 1. 组播 vs 单播/广播 传输类型目标地址网络负载典型应用场景单播单一明确IP随接收者数量线性增长网页浏览、文件下载广播全网段(如255.255.255.255)强制全网设备处理ARP请求、DHCP发现组播D类地址(224.0.0.0~239.255…...
JWT(JSON Web Token)
目录 一 JWT简单介绍 二、JWT 的组成结构 1 Header(头部) 2 Payload(载荷) 三、JWT 工作原理 好文分享 session、cookie、token 详解_token session cookie-CSDN博客 一 JWT简单介绍 概念:是一种开放标准&#…...
深入理解多线程编程:从基础概念到实战应用
二进制信号量:线程同步的基础 什么是二进制信号量? 二进制信号量是一种特殊的信号量,其值只能是0或1。它是最简单的线程同步机制之一,常用于线程间的简单协调。 #include <semaphore.h>sem_t sem; // 声明二进制信号量 se…...
【STM32设计】基于STM32的智能门禁管理系统(指纹+密码+刷卡+蜂鸣器报警)(代码+资料+论文)
本课题为基于单片机的智能门禁系统,整个系统由AS608指纹识别模块,矩阵键盘,STM32F103单片机,OLED液晶,RFID识别模块,继电器,蜂鸣器等构成,在使用时,用户可以录入新的指纹…...
【MVP 和 MVVM 相比 MVC 有哪些优化点?】
MVP 和 MVVM 相比 MVC 的优化及原因 1. MVC 的痛点 在传统 MVC 模式中: 视图(View)和模型(Model)直接交互:View 可能直接监听 Model 的变化(如观察者模式),导致耦合。…...
蓝桥云客 刷题统计
刷题统计 问题描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目,周六和周日每天做 b 道题目。请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n 题? 输入格式 输入一行包含三个整数 a, b 和 …...
【28BYJ-48】STM32同时驱动4个步进电机,支持调速与正反转
资料下载:待更新。。。。 先驱动起来再说,干中学!!! 1、实现功能 STM32同时驱动4个步进电机,支持单独调速与正反转控制 需要资源:16个任意IO口1ms定时器中断 目录 资料下载:待更…...
【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】【代码篇】A题解题全流程(持续更新)
【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】【代码篇】A题解题全流程(持续更新) 环境配置: 显存>24GBPyTorch 2.3.0Python 3.12(ubuntu22.04)CUDA 12.1autoDL服务器平台,(好处:可以分享镜像&…...
迅为RK3568开发板驱动开发指南helloworld驱动实验-驱动的基本框架
Linux 驱动的基本框架主要由模块加载函数,模块卸载函数,模块许可证声明,模块参数,块导出符号,模块作者信息等几部分组成,其中模块参数,模块导出符号,模块作者信息是选的部分…...
Spring Boot 3.4.3 基于 JSqlParser 和 MyBatis 实现自定义数据权限
前言 在企业级应用中,数据权限控制是保证数据安全的重要环节。本文将详细介绍如何在 Spring Boot 3.4.3 项目中结合 JSqlParser 和 MyBatis 实现灵活的数据权限控制,通过动态 SQL 改写实现多租户、部门隔离等常见数据权限需求。 一、环境准备 确保开发环境满足以下要求: …...
软件工程面试题(二十三)
1、public class Test {public static void add(Integer i){int val=i.intValue(); val+=3; i=new Integer(val); } public static void main(String[] args) {Integer i=new Integer(0); add(i); System.out.println(i.intValue());...
spring boot 集成redis 中RedisTemplate 、SessionCallback和RedisCallback使用对比详解,最后表格总结
对比详解 1. RedisTemplate 功能:Spring Data Redis的核心模板类,提供对Redis的通用操作(如字符串、哈希、列表、集合等)。使用场景:常规的Redis增删改查操作。特点: 支持序列化配置(如String…...
leetcode-热题100(3)
leetcode-74-搜索二维矩阵 矩阵最后一列升序排序,在最后一列中查找第一个大于等于target的元素 然后在该元素所在行进行二分查找 bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target) {int n matrixSize;int m matrixColSize[0];in…...
【大模型系列篇】大模型基建工程:使用 FastAPI 构建 SSE MCP 服务器
今天我们将使用FastAPI来构建 MCP 服务器,Anthropic 推出的这个MCP 协议,目的是让 AI 代理和你的应用程序之间的对话变得更顺畅、更清晰。FastAPI 基于 Starlette 和 Uvicorn,采用异步编程模型,可轻松处理高并发请求,尤…...
基于大模型预测风湿性心脏病二尖瓣病变的多维度诊疗研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、大模型技术概述 2.1 大模型的原理与架构 2.2 在医疗领域的应用现状 三、术前评估与预测 3.1 患者数据收集与分析 3.1.1 临床数据收集 3.1.2 影像数据处理 3.2 大模型预测模型建立 3.2.1 数据预处理 3.…...
5.模型训练-毕设篇
vgg: base_model_vgg13 models.vgg13(pretrainedTrue) base_model_vgg13.classifier[-1] nn.Linear(4096, num_classes) base_model_vgg13.to(device)(b_img_rgb.to(device)).shapebase_model_vgg13 models.vgg13(pretrainedTrue) 作用:加载预训练的…...
[物联网iot]对比WIFI、MQTT、TCP、UDP通信协议
第一步:先理解最基础的关系(类比快递) 假设你要给朋友寄快递: Wi-Fi:相当于“公路和卡车”,负责把包裹从你家运到快递站。 TCP/UDP:相当于“快递公司的运输规则”。 TCP:顺丰快递&…...
【含文档+PPT+源码】基于Python的股票数据可视化及推荐系统的设计与实现
项目介绍 本课程演示的是一款基于Python的股票数据可视化及推荐系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行…...
LeetCode算法题(Go语言实现)_23
题目 给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid ,返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目。 如果行和列以相同的顺序包含相同的元素(即相等的数组),则认为二者是相等的。 一、代码实现 func equalPairs…...
Windows家庭版如何开启Hyper-V与关闭Hyper-V
在Windows中如果要安装桌面版Docker,那么Hyper-V一定是需要开启的,在专业版操作系统上,这个功能直接就可以勾选开启,重启之后就即可生效,但在家庭版的操作系统上,默认是没有这个选择项的,这时候我们就需要借助于命令去开启它。本文,整理了一键开启Hyper-V服务和一键关闭…...
C# 中充血模型和贫血模型
在C#中,充血模型(Rich Domain Model)和贫血模型(Anemic Domain Model)是两种截然不同的领域建模方式,核心区别在于业务逻辑的归属。以下是通俗易懂的解释: 1. 贫血模型ÿ…...
C++中的继承
#include <iostream> using namespace std;// 武器类(基类) class Weapon { protected:int atk; // 攻击力public:// 构造函数Weapon(int atk 0) : atk(atk) {}// 虚拟析构函数virtual ~Weapon() {}// set 和 get 接口void setAtk(int atk) {this…...
Uubuntu20.04复现SA-ConvONet步骤
项目地址: tangjiapeng/SA-ConvONet: ICCV2021 Oral SA-ConvONet: Sign-Agnostic Optimization of Convolutional Occupancy Networks 安装步骤: 一、系统更新 检查系统是否已经更新到最新版本: sudo apt-get update sudo apt-get upgra…...
Blender模型导入虚幻引擎设置
单位系统不一致 Blender默认单位是米(Meters),而虚幻引擎默认使用**厘米(Centimeters)**作为单位。 当模型从Blender导出为FBX或其他格式时,如果没有调整单位,虚幻引擎会将1米(Blen…...
大数据Spark(五十五):Spark框架及特点
文章目录 Spark框架及特点 一、Spark框架介绍 二、Spark计算框架具备以下特点 Spark框架及特点 一、Spark框架介绍 Apache Spark 是一个专为大规模数据处理而设计的快速、通用的计算引擎。最初由加州大学伯克利分校的 AMP 实验室(Algorithms, Machines, and Pe…...
深入理解Python asyncio:从入门到实战,掌握异步编程精髓
文章目录 前言一、asyncio基础概念1.1 什么是异步编程?1.2 asyncio核心组件 二、asyncio核心用法详解2.1 事件循环管理2.2协程与任务2.3 异步上下文管理器 三、asyncio高级特性3.1 异步生成器3.2异步队列3.3 异步锁和信号量 四、asyncio实战项目4.1 高性能Web爬虫4.…...
线段树,单点,区间修改查阅
#PermanentNotes/algorithm 思想 首先关于树有许多类型,这里我们主要首线段树,整体思想就是将一个大区间进行拆分,拆分成各个小区间,在我们进行查找,更新时,就是对区间的查找更新 类型 初始化,构建树 代码 const int Z 1e7; const ll INF 1e18; const int maxn 1e5 10…...
音视频(二)ffmpeg编译及推流
FFmpeg 大名鼎鼎,就不多介绍了 1:环境 win11_amd64 ffpmeg download:https://git.ffmpeg.org/ffmpeg.git ffmpeg msys2 download:https://www.msys2.org/ vs2022 (c 写demo用) 用别的也行 usb2.0 摄像头(有点老) opencv 看上传的…...