其他链接检查器是如何实现递归的
本文核心看点不是技术教程,而是一个亲身经历了5年失败的工程师,带着好奇心去读别人源码后得到的发现:其他链接检查器并没有用什么高明trick实现递归,它们从一开始就是爬虫架构。作者拆解了muffet(Go/WaitGroup)、LinkChecker(Python/无界队列+计数器)、linkinator(TypeScript/单线程onIdle)和broken-link-checker(JavaScript/双队列事件级联)四个开源项目,逐一呈现它们处理递归的核心组件——可变工作队列(frontier)、入队时原子标记的visited set、以及终止检测原语。每段分析都附带作者对自己项目lychee的深刻反思:为什么一个Rust项目花了5年才走通这条路?因为lychee最初设计为单向流管道(stream),而递归需要回环(cycle),在异步channel模型中插入循环就是死锁的根源。架构选择是命运级的——一开始是爬虫还是流,决定了未来五年的工程痛苦。