ScriptPlan是一个高精度、分钟级项目调度引擎,专为强大的资源分配和依赖管理而设计。它使用熟悉的TaskJuggler (.tjp) 文件格式,方便现有用户采用。该引擎以JSON或CSV格式将报告输出到标准输出,支持Unix风格的管道,可与`jq`和`csvkit`等工具无缝集成。
主要特性包括精确的时间物理(处理时区、闰年和夏令时)、复杂的资源约束管理(每日/每周限制、层级结构)以及先进的调度模式,如ASAP和ALAP,并具有优先级抢占功能。ScriptPlan擅长处理具有原子任务、间隙约束和零缓冲同步的复杂工作流程。
在内部,它采用整数运算以避免浮点数漂移,确保即使对于复杂的计划也能保持精度——通过成功调度跨越闰年边界的500个具有质数持续时间的任务来证明。它构建可靠,提供安全的并发执行和SHA256报告ID用于内容验证。ScriptPlan是开源的(Apache 2.0),并且是Highway Workflow Engine的一部分。
《强殖舰队2》经过大规模优化,文件大小减少了85%——从154GB降至仅23GB,这得益于与Nixxes Software的合作。 这一显著减少是通过移除重复的游戏数据实现的,最初是为了改善老式机械硬盘(HDD)的加载时间。
开发者发现他们最初对HDD加载时间的预估不准确,这一更改只会为仍然使用HDD的11%玩家增加几秒钟的加载时间。重要的是,在《强殖舰队2》中,大部分加载时间实际上是由关卡生成造成的,而非资源加载。
PC玩家可以通过Steam的beta更新访问更小的“精简”版本,所有进度和购买将保留。 这一举措树立了一个积极的先例,鼓励其他开发者优先考虑PC游戏的存储空间优化。
## 多线程 Vulkan 渲染器:TBB 与 C++26 执行器
本文详细介绍了一项实验,比较了用于加速 Vulkan 渲染器项目启动的多线程方法。作者在优化《Stellaris》等游戏启动时间方面经验丰富,旨在利用多线程进行资源加载——具体来说是着色器编译和纹理解压缩——在渲染器开发期间。
最初,该过程是串行的。作者通过并行化着色器编译和纹理处理,对比了 TBB(线程构建块)实现,并取得了显著的速度提升。TBB 可预测的线程池以及与分析工具(Optick)的集成被证明很有价值。
接下来,作者测试了即将推出的 C++26 执行器(使用 NVIDIA 的 `stdexec` 实现)。虽然声明式、流水线风格的语法很有吸引力,但初步结果令人失望,任务串行执行。需要使用 `continues_on()` 解决方法来强制并行执行,这表明可能存在错误或可用性问题。
最终,作者发现 C++26 执行器比 TBB 更冗长和复杂,并担心隐藏的性能陷阱和编译时间增加。他们质疑如此复杂的功能是否应该直接包含在标准中,建议采用库优先的方法可能更明智,类似于 `unique_ptr` 和 `optional` 等功能的成功标准化。目前,他们计划继续使用 TBB 进行生产代码。