栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么cgo的性能这么慢?我的测试代码有问题吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么cgo的性能这么慢?我的测试代码有问题吗?

正如您所发现的那样,通过CGo调用C / C
++代码的开销相当大。因此,一般而言,最好是尽量减少拨打CGo的次数。对于上面的示例,与其在循环中重复调用CGo函数,不如将循环向下移动到C。

Go运行时如何设置其线程可能会破坏许多C代码的期望,有很多方面:

  1. Goroutine在相对较小的堆栈上运行,通过分段堆栈(旧版本)或复制(新版本)来处理堆栈增长。
  2. Go运行时创建的线程可能无法与
    libpthread
    的线程本地存储实现正确交互。
  3. Go运行时的UNIX信号处理程序可能会干扰传统的C或C ++代码。
  4. Go重用OS线程来运行多个Goroutine。如果C代码调用了阻塞系统调用或以其他方式独占了线程,则可能对其他goroutine有害。

由于这些原因,CGo选择了在传统堆栈中设置的单独线程中运行C代码的安全方法。

如果您来自Python之类的语言,那么用C重写代码热点作为加速程序的一种方法并不少见,您会失望的。但是,与此同时,等效的C和Go代码之间的性能差距要小得多。

通常,我保留使用CGo与现有库进行接口,可能还使用小型C包装函数,这些函数可以减少我需要从Go进行的调用次数。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/417720.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号