我写了一个端口扫描器,Rust再一次比Go慢,问题出在哪里呢?

💡 原文中文,约5200字,阅读约需13分钟。
📝

内容提要

本文探讨了使用Go和Rust编写TCP端口扫描器的性能差异。Go版本执行时间不到1秒,而Rust版本超过2秒。作者希望了解Rust性能较慢的原因,并尝试将Go代码迁移到Rust中,但在通道实现上遇到问题。此外,在高并发情况下,Rust和Go都无法扫描某些高端口。

🎯

关键要点

  • 本文探讨了使用Go和Rust编写TCP端口扫描器的性能差异。
  • Go版本执行时间不到1秒,而Rust版本超过2秒。
  • 作者希望了解Rust性能较慢的原因,并尝试将Go代码迁移到Rust中。
  • 在通道实现上遇到问题,tokio似乎只有oneshot和mpsc两种通道。
  • Rust版本在高并发情况下无法扫描某些高端口。
  • 作者的测试用例并不完全等价,Rust版本的并发数设定较高时速度更慢。
  • 在Rust中调整并发数到65535时,无法扫描到某些高端口。
  • Go语言如果直接给每个tcp链接起一个go程而不使用worker模式,也无法扫描到这些端口。