如何高效且方便的使用tokio的mpsc

💡 原文中文,约800字,阅读约需2分钟。
📝

内容提要

作者在学习tokio并写一个练手项目时遇到问题,需要让多个task向一个文件高效地打印日志。作者提出了两个方案,一个是使用全局的Mutex<File>,另一个是使用全局的channel。作者认为方案2.2是最好的,但觉得它很山寨。作者想知道方案2.2是否有问题,是否真的没有竞争,是否最合理最高效。

🎯

关键要点

  • 作者在学习tokio并写练手项目时遇到问题,需要多个task高效打印日志。
  • 场景中,服务在收到请求后生成多个task,任务中需要打印自定义格式的业务日志。
  • 作者提出两个方案:1. 使用全局的Mutex<File>,2. 使用全局的channel。
  • 方案1可能导致激烈的竞争,方案2则通过channel减少竞争。
  • 方案2.1是为每个task传递一个clone的tx,代码复杂且不灵活。
  • 方案2.2是使用OnceCell定义全局tx,其他task直接访问,认为这样没有竞争。
  • 作者认为方案2.2是最优,但对其合理性和效率有疑问,担心其是否存在问题。
➡️

继续阅读