首页 >后端开发 >Golang >为什么 CGo 比 Pure Go 慢,如何提高性能?

为什么 CGo 比 Pure Go 慢,如何提高性能?

Barbara Streisand
Barbara Streisand原创
2024-11-28 20:25:18570浏览

Why is CGo Slower Than Pure Go, and How Can I Improve Performance?

CGo 调用的性能缺点

您观察到的 Cgo 函数与纯 Go 函数相比性能较慢,这与固有的开销是一致的通过CGo调用C/C代码。为了缩小这种性能差距,最大限度地减少 CGo 调用的频率至关重要。考虑将循环重新定位到 C 以避免重复的 CGo 调用。

C 代码的 Go 运行时线程化的后果

此外,Go 运行时的线程设置可能会影响C代码。以下是一些值得注意的方面:

  • Goroutines 利用小堆栈,采用分段堆栈或复制机制来实现堆栈增长。
  • Go 运行时启动的线程可能会面临与线程的兼容性问题 - libpthread 的本地存储实现。
  • Go 运行时使用的 UNIX 信号处理程序可能会破坏传统的 C 或 C
  • Go 重用 OS 线程来执行多个 Goroutine,如果发生阻塞系统调用或线程独占,可能会影响 C 代码的性能。

CGo 的安全导向方法

由于这些因素,CGo 选择了保守的方法,在具有传统堆栈的专用线程。

Go 中的性能预期

与 Python 等语言相反,在 Python 中,用 C 重写性能关键部分是一种常见做法,等效的 C 和 Go 代码之间的性能差距明显缩小。因此,CGo 通常保留用于与现有库的接口,可能受到小型 C 包装函数的支持,以减少 CGo 调用频率。

以上是为什么 CGo 比 Pure Go 慢,如何提高性能?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn