- 主题:Cgo效率真低
有个应用用到C写的lib库,用Cgo调了下,高频次的调用性能惨不忍睹,大部分耗在Cgo调用了。看了下原理go调用C是比较特殊;有个方案是把C编译成汇编再转成Go的汇编,再直接编到go的二进制里去。可对于一个很大的lib,这个方法看上去就很麻烦了。有没有更好的方案?
--
FROM 106.121.9.*
微服务?
【 在 harmonica (草原上琴声忧伤) 的大作中提到: 】
: 有个应用用到C写的lib库,用Cgo调了下,高频次的调用性能惨不忍睹,大部分耗在Cgo调用了。看了下原理go调用C是比较特殊;有个方案是把C编译成汇编再转成Go的汇编,再直接编到go的二进制里去。可对于一个很大的lib,这个方法看上去就很麻烦了。有没有更好的方案?
--
FROM 27.38.249.*
要不实现一个异步调用, 数据缓存, 一次性多传一些数据。
【 在 harmonica 的大作中提到: 】
:
: 有个应用用到C写的lib库,用Cgo调了下,高频次的调用性能惨不忍睹,大部分耗在Cgo调用了。看了下原理go调用C是比较特殊;有个方案是把C编译成汇编再转成Go的汇编,再直接编到go的二进制里去。可对于一个很大的lib,这个方法看上去就很麻烦了。有没有更好的方案?
:
: --
: 发自xsmth (iOS版)
: --
:
发自「今日水木 on PCT-AL10」
--
FROM 101.86.16.*
用了cgo就不能跨平台,能不用就不用吧
--
FROM 112.45.97.*
具体的场景是什么样的能描述一下吗?
overhead 主要在哪里?
我之前用 cgo 的时候没觉得有特别高的 overhead。
【 在 harmonica (草原上琴声忧伤) 的大作中提到: 】
: 有个应用用到C写的lib库,用Cgo调了下,高频次的调用性能惨不忍睹,大部分耗在Cgo调用了。看了下原理go调用C是比较特殊;有个方案是把C编译成汇编再转成Go的汇编,再直接编到go的二进制里去。可对于一个很大的lib,这个方法看上去就很麻烦了。有没有更好的方案?
--
修改:try FROM 111.196.61.*
FROM 111.196.61.*
跨语言调用是不是都得这样?两个runtime切换?
--
FROM 36.7.79.*
Python调用c?
【 在 jerryAndTom 的大作中提到: 】
:
: 跨语言调用是不是都得这样?两个runtime切换?
: --
发自「今日水木 on Mi Note 3」
--
FROM 106.121.7.*
场景就是高频调用,实时性要求比较高一点,没法批次调用;
如果大批次调用的话,性能还是可以接受的
【 在 eematlab 的大作中提到: 】
: 要不实现一个异步调用, 数据缓存, 一次性多传一些数据。
: 发自「今日水木 on PCT-AL10」
--
FROM 153.122.161.*
主要是调用频次比较高, 多线程的高频调用C的lib库;
如果缓存数据加大batch的话,overhead占比就很低了,问题就不大了
【 在 try 的大作中提到: 】
: 具体的场景是什么样的能描述一下吗?
: overhead 主要在哪里?
: 我之前用 cgo 的时候没觉得有特别高的 overhead。
: ...................
--
FROM 153.122.161.*
那还是用C++吧
--
FROM 219.145.32.*