每日HackerNews RSS

## std::Mutex vs. parking_lot::Mutex:深入分析与决策指南 团队考虑从 Rust 的标准 `std::sync::Mutex` 切换到 `parking_lot::Mutex`,从而引发了对两者性能差异的深入调查。 尽管初步搜索结果偏向 `parking_lot`,但作者希望更深入地理解,因此对两种实现方式进行了详细检查,并进行了大量的基准测试。 `std::Mutex` 使用平台特定的实现(通常是 Futex),并采用内核管理的队列,优先考虑吞吐量。 然而,在高度竞争的情况下,这可能导致线程饥饿。 另一方面,`parking_lot::Mutex` 在所有平台上使用单一算法和用户空间队列,优先考虑公平性和可预测性。 它通过更小的内存占用(始终为 1 字节)和公平定时器(防止无限期锁定)来实现这一点。 在各种场景下的基准测试表明,`std::Mutex` 在低到中等竞争和短临界区中表现出色。 然而,`parking_lot::Mutex` 在高竞争、突发工作负载以及存在潜在锁垄断的场景中表现出卓越的性能,提供更稳定的等待时间并防止线程饥饿。 **选择 `std::Mutex` 的时机:** 需要零依赖项,竞争较低,需要用于调试的毒化(poisoning),或平台特定优化至关重要。 **选择 `parking_lot::Mutex` 的时机:** 公平性至关重要,可预测的行为至关重要,内存占用很重要,或存在锁垄断的风险。 最终,选择取决于应用程序的特定需求——吞吐量与公平性和可预测性。

## Rust Mutex 性能:std vs. parking_lot 最近的分析比较了 Rust 标准库 (`std`) mutex 和 `parking_lot` crate 的 mutex。 历史上,`std` 使用效率较低的 pthread mutex,但现在利用操作系统特定的锁(Windows 上的 SRW,Linux/macOS 上的基于 futex 的锁)来实现性能和内核集成。 直接采用 `parking_lot` 的主要限制在于它依赖于需要内存分配的全局哈希表——在使用自定义分配器时会产生循环依赖。 虽然 `parking_lot` 在需要细粒度锁定的场景中表现出色(由于其较小的锁大小,允许锁位于对象头内),但 `std` mutex 通常表现出可比或更好的性能,尤其是在低竞争情况下。 `parking_lot` 在高竞争下的公平性和较低方差方面表现出色。 目前的工作旨在将 poisoning(panic 处理)从 `std` mutex 中解耦,以解决一个常见的批评。 讨论强调了在 Rust 中选择锁定机制时,性能、安全性和抽象级别之间的权衡。

## Shai-Hulud 蠕虫再次袭击 npm 名为“第二次降临”的新一波攻击来自 Shai-Hulud npm 蠕虫,正在影响开发者。这种自我复制的恶意软件,以《沙丘》中的沙虫命名,利用 npm 在 12 月 9 日撤销经典令牌前的漏洞窗口,入侵软件包以窃取密钥并进一步传播。 本次攻击与之前的攻击不同,它使用 `bun` 进行执行,并为泄露的数据创建动态命名的 GitHub 仓库。它的影响范围也在扩大,目标数量从之前的 20 个软件包增加到 100 个,并威胁如果 GitHub/npm 身份验证失败,将擦除用户主目录。 目前,已有 **492 个软件包** 确认被入侵,其中包括来自 Zapier、ENS、AsyncAPI、PostHog 和 Postman 的软件包,总计 **1.32 亿次每月下载量**。该蠕虫使用 TruffleHog 搜索暴露的 API 密钥和令牌,并将结果上传到公共 GitHub 仓库。 **安全团队应立即:** 审计依赖项,轮换凭据,检查 GitHub 上是否有可疑仓库,在 CI 中禁用 `postinstall` 脚本,固定软件包版本,并强制 MFA。 这是一个持续发生的情况,保持警惕至关重要。

## Shai-Hulud 供应链攻击总结 第二次供应链攻击,名为“Shai-Hulud”(最初误写为 SHA1-Hulud),已破坏 NPM 包,影响了 Postman、Zapier 和 PostHog 等公司。攻击者正在将窃取的密钥,包括 AWS 凭据,上传到名为“Sha1-hulud”的公共 GitHub 仓库。 Hacker News 上的讨论集中在缓解策略上。用户建议使用 Bubblewrap (bwrap) 等工具来限制恶意代码在安装期间造成的损害,以及 paranoid.js,一个检查最近更新的依赖项的脚本,以防止潜在的受损包被包含在构建中。 该事件引发了关于识别 Hacker News 上重复帖子的讨论,最终导致相关讨论合并。虽然 GitHub 目前正在托管泄露的密钥,但有些人认为暂时保留它们可能会帮助防御者识别受损系统。一篇包含更多详细信息的相关文章可在 helixguard.ai 上找到。

## 无服务器搜索:深入研究 Nixiesearch 在 AWS Lambda 上的应用 本文探讨了实现真正无服务器搜索的挑战,揭穿了当前“无服务器搜索”解决方案不过是隐藏的、始终在线的基础设施的观点。作者尝试在 AWS Lambda 函数中运行 Nixiesearch,一个基于 Lucene 的搜索引擎,来解决这个问题。 主要障碍包括类似 Elasticsearch 引擎的大型容器尺寸(约 700MB)、缓慢的启动时间(40+ 秒)以及集群状态管理的复杂性。解决方案涉及使用 GraalVM native-image 创建更小、更快的二进制文件,并探索通过 S3 和 EFS 进行远程索引存储。 实验表明,虽然冷启动时间可以缩短到半秒以下,但网络存储(尤其是 EFS)由于缓慢的随机读取而引入了显著的延迟。将索引烘焙到 Docker 镜像中并不能改善情况,因为 Lambda 仍然将其缓存在 S3 中。 作者提出了一种未来的方向:利用 S3 的并发性在 HNSW 图遍历期间并行化 embedding 加载,可能实现约 100 毫秒的基线延迟。最终,该项目展示了无服务器搜索的复杂性,并强调了需要进行架构调整以克服固有的限制。

一位开发者构建了NixieSearch,一个以Lambda函数实现的搜索引擎,旨在降低成本——仅在搜索时付费。该项目利用Lucene和GraalVM原生二进制文件来提高性能。 Hacker News上的讨论强调了之前类似架构的尝试,一位用户成功地在Lambda上使用Lucene,但后来由于个人AWS账户偏好而放弃。 另一位提到使用Quickwit,一个低成本选择,但其Lambda支持即将结束,从而需要像NixieSearch这样的替代方案。 一个关键的讨论点围绕Lambda内存限制,关于默认和最大可用RAM的报告存在冲突(范围从3GB到10GB),以及向AWS支持请求增加内存的过程。 该架构涉及索引到S3然后下载到EFS,引发了关于直接写入EFS的问题。 总而言之,该项目解决了现代应用程序中搜索功能日益增长的成本问题。

## 基于 Docker 的 SLURM 高性能计算集群 本项目提供了一个精简、生产就绪的多容器高性能计算 (HPC) 环境,使用 Docker 和 Rocky Linux 9。由 eXact lab S.r.l. 开发,它虚拟化了一个具有 SLURM 工作负载管理器和 OpenMPI 支持的 HPC 系统,并可选地通过 MariaDB 提供完整的作业会计。 默认设置包括一个主节点、两个工作节点(每个 4 个 vCPU/2GB RAM)和一个可选的数据库节点。提供 SSH 访问(使用生成的密钥 – *不适用于生产环境*)用于集群交互。用户通过挂载的主目录卷在节点之间同步,SLURM 配置共享。 主要功能包括节点内/节点间 MPI 作业执行、通过软件包安装(使用 `packages.yml`)进行运行时自定义,以及模拟 scratch/work 区域的共享存储。SLURM 配置可以通过卷挂载进行自定义。缓存机制优化了软件包安装速度。 镜像可在 GitHub Container Registry 上获取,也可以本地构建。本项目旨在用于教育和测试目的,提供了一种便捷的方式来探索和试验 HPC 概念。

## vHPC:Docker Compose 中的虚拟 SLURM HPC 集群 一位开发者分享了 vHPC,一个全新的开源项目,它在 Docker Compose 环境中提供了一个功能齐全的 SLURM 高性能计算 (HPC) 集群。vHPC 的创建是为了方便开发者针对大型意大利 HPC 系统 (Cineca Leonardo) 进行开发,而不会影响生产资源,它旨在保持简单和通用,尽管其起源特定。 该项目填补了现成容器化 HPC 解决方案的空白,现有方案通常缺乏关键功能,如会计或最新的软件。评论员指出,替代方案通常涉及使用 Ansible、Chef 或 Puppet 等工具的复杂且过时的配置。 讨论提到了加拿大数字研究联盟的 Terraform 脚本以及 OpenOnDemand 等工具(一个用于现有集群的 Web 界面)。vHPC 侧重于本地原型设计和测试,而非大规模生产部署,并提供 SSH 访问以直接在集群上工作。一些用户表达了对现代 SLURM 替代方案的需求,并表示对 SLURM 在自动化测试环境中的局限性感到沮丧。

登录

## Chromium 重新评估 JPEG XL 谷歌重新考虑在 Chromium 浏览器中集成 JPEG XL (JXL) 解码器。这得益于该格式的积极信号,特别是基于 Rust 的解码器正在开发中。然而,谷歌在默认启用 JXL 之前,需要对长期维护做出承诺。 讨论强调了 JXL 相较于 JPEG、WebP 和 AVIF 等现有格式的潜在优势,包括更好的 HDR 支持和无损重压缩能力。一些人认为 JXL 是一个比其前代更经过深思熟虑的图像格式。 然而,由于谷歌放弃项目的历史,以及对向网络中已经复杂的图像格式生态系统添加另一种格式的担忧,仍然存在怀疑。无损重压缩功能,允许精确的 JPEG 重压缩,被视为一个关键优势。Mozilla 也表达了兴趣,但前提是需要一个高性能且内存安全的解码器。最终,采用取决于持续的开发和支持。

## Serflings:对《Settlers 1》的忠实重制 Serflings是对经典策略游戏《Settlers》(在某些地区被称为《Serf City》)的重制,旨在最大限度地忠于原作,同时添加现代改进,例如更高的分辨率和联网游戏。 运行Serflings需要原始《Settlers 1》游戏中的一个文件——SPAE.PA(或其语言版本),但如果您安装了历史版本,则不需要此文件。它完全支持来自DOS版本和历史版本(Ubisoft提供)的存档游戏。 该重制版包含所有原始任务、人工智能和核心功能,以及流畅滚动、缩放、可调节游戏速度和局域网多人游戏等功能。它支持德语、英语、法语和波兰语。 目前仍在开发中,建筑替换和网络大厅等原始功能仍在计划中。您可以在他们的[Github](https://github.com/Serflings/Serflings)和[Discord](链接未提供)上找到更多信息、开发更新和报告错误。

## 《殖民者》重制版与续作引发讨论 一个Hacker News论坛讨论了《殖民者1》的重制版“Serflings”,引发了关于该系列遗产和现代替代品的对话。 许多用户怀念《殖民者1 & 2》,强调其独特的物流挑战——通过严格的路径网络系统管理资源运输,本质上是构建一个具有有限吞吐量的节点和边的图。 值得注意的是,有人提到了由原《殖民者》创作者打造的现代续作“Pagonia先驱者”,目前处于抢先体验阶段。 其他推荐给粉丝的游戏包括开源游戏“Widelands”、独立游戏“The Colonists”(专注于道路建设物流)和“Farthest Frontier”。 讨论还涉及优化资源流的吸引力以及对后期《殖民者》游戏放弃复杂路径系统的沮丧。 一些用户甚至将游戏中的物流挑战与现实生活中的组织习惯联系起来! 此外,还提出了一个关于使用人工智能重现原始图形的法律问题,并讨论了“干净房间设计”原则。

``` -- 创建一个新的本地服务器 local server = require("http").server.new() -- 注册一个路由 server:get("/", function() return "hello from default Astra instance!" end) -- 你也可以在路由中使用局部变量 local counter = 0 server:get("/count", function(request, response) -- 消费请求体 print(request:body():text()) -- 设置状态码 (可选) response:set_status_code(300) -- 设置头部 (可选) response:set_header("header-key", "header-value") counter = counter + 1 -- 也可以返回JSON return { counter = counter } end) -- 配置服务器 server.port = 3000 -- 运行服务器 server:run() ```

## Astra:一个用 Rust 构建的 Lua Web 服务器运行时 - 摘要 一个名为 Astra 的新项目旨在为 Lua (5.1-5.4)、Luau 和 LuaJIT 提供一个 Web 服务器运行时,使用 Rust 构建。然而,讨论很快表明 Astra **并没有用 Rust 实现一个新的 Lua 引擎**,而是通过像 `mlua` 这样的 crates 包装现有的 C/C++ Lua 实现,提供 Rust 接口并将它们打包成一个单独的二进制文件。 该项目的命名和描述引发了争论,一些人质疑使用“运行时”,因为它并没有重写 Lua 解释器本身。作者承认这种混淆,并计划澄清文档。Astra 的目标是通过提供一个捆绑的环境,其中包含可以从 Lua 访问的现成 Rust 库,从而加快开发速度,最初专注于 Web 服务器应用程序,但会扩展到其他用例。 虽然 Astra 不是一种新颖的 Lua 实现,但它旨在提供便利性和与 Rust 生态系统的集成,类似于 JavaScript 世界中的 Bun 或 Deno 等项目。讨论中还提到了其他几个 Lua Web 服务器框架,如 Redbean 和 Luvit。

## Cynthia: MIDI 播放器简介 Cynthia 是一款便携、功能丰富的 Windows MIDI 播放器(通过 Wine,可在 Linux/Mac 上使用),旨在提供简便的播放和精细的控制。它支持 `.mid`、`.midi` 和 `.rmi` 文件(格式 0 和 1),并附带 25 个示例 MIDI 文件。用户可以从文件夹或 `.m3u` 播放列表播放文件,并支持拖放功能创建播放列表。 主要功能包括可调节的播放速度(10%-1000%)、音量控制(最高可提升 200%)、多种播放模式(重复、随机等)以及用于精确导航的进度条。高级选项允许控制多个 MIDI 设备、时间调整,以及对音轨、通道和音符的详细视图,并带有实时数据指示器。 Cynthia 提供广泛的自定义选项,包括颜色方案、字体调整,甚至 Xbox 控制器支持。它设计轻巧便携,无需安装,且不会在系统上留下任何痕迹。一个全面的选项面板允许用户根据自己的喜好定制应用程序的外观和行为。

刘医生的经历体现了美国医疗系统内日益增长的担忧:可能流失重要的移民人才。最初被美国的医学和研究机会吸引,刘医生现在因近期影响外国出生专业人士的政策而质疑自己的未来。H1B签证费用增加和科研经费削减造成了不确定性和幻灭感,促使他考虑返回加拿大。 这并非个案。移民占美国医生总数的约25%——在初级保健和肿瘤学等关键领域,这一比例几乎上升到50%,尤其是在服务欠缺的农村地区。专家警告说,限制性移民政策正在加剧现有的医疗资源短缺,并损害美国在全球医疗创新领域的声誉。 历史上,美国通过对科研的投资和便捷的移民途径吸引顶尖人才,始于1965年的《哈特-塞勒法案》。现在,中国和德国等国家正在积极招募这些专业人士,提供美国目前缺乏的稳定性和资源,这可能会对美国的医疗保健产生世代影响。

## 美国医生短缺问题 - Hacker News 摘要 最近一篇 NPR 文章,强调了吸引外国医生可能存在的困难,引发了 Hacker News 的讨论。核心问题似乎是美国医疗系统自我设定的瓶颈:**联邦资助的住院医师名额有限**,历史上由美国医学会游说以保护医生收入。 用户们争论了“与患者的文化联系”的重要性,许多人强烈反对这种观点,认为其带有偏见,与医疗质量无关。 讨论主要集中在**系统性的治理和资源管理问题**,而不是外国医生本身的问题。 一些评论员指出,扩大医学院招生可以缓解这个问题,但受到住院医师名额限制。 另一些人指出,农村医疗面临着独特的挑战,外国医生经常提供关键服务,以及农村医院倒闭的令人担忧的趋势。 最后,讨论涉及到了与其它发达国家相比,美国医疗系统更广泛的缺陷,提到了成本、可及性和整体健康结果方面的问题。 许多人认为,目前的系统优先考虑利润而非患者福祉。

更多

联系我们 contact @ memedata.com