Go 和 C# 的速度比较来了

我通常使用 C#,但我有机会使用 Go,并且由于传闻 Go 速度很快,所以我实际测量了它。

测量内容

我在 Go 和 C# 中执行了一个简单的循环和判断过程,以查看整数 2 到 N 是否为质数。

  • 来源是Github参考。
  • 测量模式
    • 逻辑内核 8 Windows 串行处理
    • 8 个逻辑内核 Windows 并行性
    • 逻辑内核 1 Windows 串行处理
    • 逻辑内核 1 Linux 串行处理
  • 对于多个逻辑核心模式,请在性能监视器中检查每个逻辑核心的 CPU 利用率。
  • 处理时间是通过平均 5 次测量来计算的。
  • 要获得的素数的最大值 N 以三种模式测量:100,000、500,000 和 1,000,000。

(补充测量模式)
・串联测量多个逻辑核心时,Go 和 C# 之间的 CPU 负载应用方式存在差异。
我还在 1 核环境中进行了测量。
・我也有兴趣在 Linux 上做。

操作环境

软环境

    • 转到 1.18.4
  • C#
    • .NET6 (6.0.302)
    • 发布版本

艰苦的环境

  • 逻辑内核 8 窗口
    • CPU:Intel(R) Core(TM) i7-8550U CPU @1.80GHz 1.99GHz
    • 视窗 10
  • 逻辑内核 1 个窗口
    • AWS EC2 t2.micro *用剩余的突发积分测量(100% CPU 可用)
    • Windows Server 2022 (AMI: Windows_Server-2022-English-Full-Base-2022.08.10)
  • 逻辑内核 1 Linux
    • AWS EC2 t2.micro *用剩余的突发积分测量(100% CPU 可用)
    • Amazon Linux 2(AMI:amzn2-ami-kernel-5.10-hvm-2.0.20220805.0-x86_64-gp2)

结果

处理时间

在任何模式下,C# 比 Go 快 3-4 倍这就是结果。

CPU 利用率

这是逻辑核数为 8 时每个逻辑核在串行处理和并行处理期间的 CPU 使用率。

串行处理

Go 和 C# 之间的总 CPU 使用率(_Total)没有区别,
Go 将负载集中在单个逻辑核心上。
C# 在一些核心上上下波动。

C#

并行处理

Go 和 C# 的 CPU 使用率都是 100%,没有区别。

C#

结论

  • 在 C# 中的简单循环处理在串行和并行处理中都比 Go 快 3-4 倍。
  • 在多核的情况下,CPU负载的施加方式似乎有所不同,但由于即使是单核,处理时间也是相同的,因此CPU负载差异对处理速度差异的贡献是小的。

想法

出乎意料的是,Go 慢了很多。
至少我认为使用 goroutine 进行并行处理会在一定程度上减少差异,但事实并非如此。
C# 也可能具有出色的线程池。
不明白为什么 Go 比较慢,所以如果有机会,我会增加比较语言
我想与各种处理进行比较。

祝愿大家国庆节快乐,留着小链接《诊断证明图片》

你可能感兴趣的:(开发语言,c#,golang,开发语言)