单线程更新队列
使用单个线程异步处理请求,以保持顺序而不阻塞调用者。
问题
当状态需要由多个并发客户端更新时,我们需要以一次一个更改的方式安全地更新它。考虑 预写日志 模式的示例。我们需要一次处理一个条目,即使多个并发客户端试图写入。通常,锁用于防止并发修改。但是,如果执行的任务很耗时,例如写入文件,则阻塞所有其他调用线程直到任务完成会对整个系统的吞吐量和延迟产生严重影响。在仍然保持一次执行一个的保证的同时,有效地利用计算资源非常重要。
解决方案
实现一个工作队列和一个从队列中工作的单个线程。多个并发客户端可以将状态更改提交到队列——但单个线程处理状态更改。这可以用 Golang 等语言中的 goroutine 和通道自然地实现。
有关更多详细信息,请访问 oreilly.com 上的在线电子书 第 13 章。
此模式是 分布式系统模式 的一部分。
2023 年 11 月 23 日