这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
Transform 与物化聚合
讲解 Elasticsearch Transform 物化聚合:pivot 与 latest 两种模式、group_by 与聚合定义、连续转换的 sync 调度与 checkpoint 机制、历史数据回填与目标索引重建,以及 Transform 与 rollup 在时序降采样场景下的取舍。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
讲解 Elasticsearch Transform 物化聚合:pivot 与 latest 两种模式、group_by 与聚合定义、连续转换的 sync 调度与 checkpoint 机制、历史数据回填与目标索引重建,以及 Transform 与 rollup 在时序降采样场景下的取舍。
讲解 Elasticsearch EQL 事件查询:事件序列语法与 until 边界、sequence 与 sample 模式、by 分组与 maxspan 取舍、与 Query DSL 的能力差异、安全检测场景建模,以及序列匹配的性能开销与常见报错。
讲解 WCF 服务向 gRPC 与 REST 的完整迁移路径,覆盖 DataContract 到 Protobuf 的契约映射与字段编号兼容、双跑并行与灰度切流、WS-Security 与 OAuth2 的安全模型差异,以及客户端超时重试改造、回归验证与常见排错清单。
讲解 .NET 多租户 SaaS 架构的完整落地路径,覆盖租户解析与 AsyncLocal 上下文传播、共享库与独立库的隔离策略、EF Core 全局查询过滤器与写入填充、按租户配置与限流分区,以及用量计量、配额执行与租户级监控告警的设计要点。
讲解 Avalonia 跨平台桌面 UI 的完整开发范式,覆盖 XAML 编译期绑定与样式选择器、CommunityToolkit.Mvvm 与依赖注入装配、Skia 渲染与平台差异适配,以及单文件、MSIX 与 AppImage 等打包分发与签名公证策略。
讲解 Dapr 边车模型在 .NET 微服务中的落地实践,覆盖服务调用与边车通信、状态存储与 ETag 乐观并发控制、发布订阅与重试死信处理、可观测性链路接入与分布式追踪,以及从本地开发到 Kubernetes 生产部署的环境差异与组件声明管理。
深入讲解 Orleans 虚拟 Actor 模型,覆盖 Grain 粒度与单线程语义、状态持久化与 Reminder 提醒机制、集群成员管理与放置策略、Orleans Streams 流式集成,以及它与微服务架构的边界划分、共存形态与选型取舍。
画面能画、能动了,但「动得好不好」要用数字说话。本节给 18.1 的装配流水线做 CPU 逐帧计时,再用 WebGPU 的 timestamp-query 在渲染通道两端打时间戳、读出真实 GPU 纳秒数,跑出可复现的毫秒数字,最后为整卷《渲染引擎》收口。
把「一天中的时刻」映射成一组可直接喂给光照的参数:太阳方向、太阳颜色、天空天顶与地平线颜色、环境光强度。本节在 helio 里从零实现这套映射,再把它原样搬进 WGSL,渲染一天三个时刻的天空并回读像素,要求 CPU 与 GPU 逐像素对齐。
前十七章把 RHI、资源、场景、剔除、排序、光照、帧图、后处理、2D 与多线程各自做成了零件。本节是综合章的第一节,把这些零件装配成一条「纯数据场景 → 帧计划」的流水线,并在真实 WebGPU 设备上把这份帧计划画出来、回读像素,验证整条链路能跑出真实结果。
命令缓冲通道有了、独立编码器拆分也验证了,但谁来切块、谁来合并还没着落。本节把「分块 → 并行录 → 合并」接到卷一那套 Job System 上:用确定性调度模型算 makespan,再用 worker_threads 真跑,实测 4 worker 把 4096 个绘制项的录制墙钟压到约 2.7 分之一,且校验和与串行完全一致。
上一节把命令缓冲做成了一条跨线程通道,但录制本身还是串行的。本节用 OffscreenCanvas 把渲染表面搬离主线程,再把一帧的命令拆成多条独立编码器分别录制、按提交顺序合并,在真实 WebGPU 设备上验证「两条命令缓冲」与「单编码器两趟」逐字节一致。
主线程一边跑游戏逻辑一边录渲染命令,逻辑一卡帧就掉。本节把录制与提交拆到渲染线程上:主线程只往命令缓冲里塞命令,渲染线程按帧取走执行,用一个双缓冲的生产消费环把「还没消费完就覆写」变成一条确定性异常,并跑出背压的真实时间线,看清三缓冲比双缓冲多出的那一份缓冲垫换来了什么。
精灵和矢量图形都能画了,但它们和 3D 世界还没有规矩:谁先画、谁压在谁上面、半透明怎么混。本节把一帧的绘制定成三段——3D 不透明近到远、3D 透明远到近、UI 永远在最上——再在同一个 render pass 里先画 3D 绿底、再用 alpha 混合叠上左半屏的红色 UI,回读出 0.5 红加 0.5 绿的真实像素。
文字和矢量图形由曲线定义,位图放大会糊、图集也装不下任意字号。本节用有向距离场(SDF)把形状变成一段距离函数:距离直接转成抗锯齿覆盖率,一个全屏三角形就能画出边缘半透明的圆角矩形,任意放大都不糊。CPU 参考与 WGSL 逐字对齐,跑出中心全白、角外全黑、边界 128 的真实像素。
2D 与 UI 渲染的第一个问题是「一张界面里成百上千个精灵怎么画」。本节先把小图打进一张 2 次幂图集(货架装箱),再用一条精灵批次键把同层同深度的同页精灵并成一次绘制:10 万个精灵在单页图集下只剩 16 次绘制,最后在真实 WebGPU 设备上跑出一次 draw(6,2) 从图集采出红蓝两个精灵。
后处理链的代价可以提前算出来:每个全屏 pass 都要把纹理读一遍、写一遍,这就是带宽。本节在 helio 里实现一份带宽账本,把 pass 的读写字节按格式与分辨率算清楚,再在真实 WebGPU 设备上实测 1/5/13 抽样三个全屏 pass 的每帧耗时,看成本到底由「固定开销」还是「像素数」主导。
场景 pass 输出的是线性 HDR,显示器要的是 [0,1] 的 LDR,中间隔着色调映射;锯齿则要在边缘上做文章。本节在 helio 里把 Reinhard、ACES、filmic 三个算子与一次 5 邻域 FXAA 接成后处理链上的两个 pass,并在真实 WebGPU 设备上验证 GPU 结果与 CPU 算子逐像素一致。
后处理是一串全屏 pass:每个 pass 读若干张纹理、写一张纹理。本节在 helio 上从零搭出全屏 Pass 链的数据模型——覆盖整个视口的全屏三角形、pass 描述符、链合法性校验,以及用「最后一次使用」回收中间纹理的物理纹理规划,再在真实 WebGPU 设备上跑一条两段链、回读像素逐通道验证。
帧图编译成执行计划只有三步:拓扑排序定顺序、给每个资源分配槽位、把 Pass 的读写原样带上。本节在 helio 里把这三步写成纯 CPU 的编译器,再让浏览器侧的执行器只按计划录命令,把一条乱序声明的三 Pass 帧图跑出正确像素,验证「声明序」与「执行序」彻底解耦。