不同语言运行100万个并发任务需要多少内存?
在这篇文章中,我深入探讨了异步和多线程编程在内存消耗方面的比较,跨足了如Rust、Go、Java、C#、Python、Node.js 和 Elixir等流行语言。
不久前,我不得不对几个计算机程序进行性能比较,这些程序旨在处理大量的网络连接。我发现那些程序在内存消耗方面有巨大的差异,甚至超过20倍。有些程序在10000个连接中仅消耗了略高于100MB的内存,但另一些程序却达到了接近3GB。
不幸的是,这些程序相当复杂,功能也不尽相同,因此很难直接进行比较并得出有意义的结论,因为这不是一个典型的苹果到苹果的比较。这促使我想出了创建一个综合性基准测试的想法。
基准测试
我使用各种编程语言创建了以下程序:
启动N个并发任务,每个任务等待10秒钟,然后在所有任务完成后程序就退出。任务的数量由命令行参数控制。
在ChatGPT的小小帮助下,我可以在几分钟内用各种编程语言编写出这样的程序,甚至包括那些我不是每天都在用的编程语言。为了方便起见,所有基准测试代码都可以在我的GitHub上找到。