使用cgo时;性能开销在哪里/何时?

时间:2017-06-02 17:10:41

标签: algorithm cgo

据我所知,使用cgo时,每次访问都会受到影响 - > C函数调用。在尝试优化我的程序时,我想知道滞后的位置,以便我可以减少这些事件的发生。所以假设的任意值(因为我没有实际的通话时间)......

如果(开始假设)

|通话类型|时间(任意单位) | --- | --- | go->go | 1
| go-> C | 10

问题,是否: C->go = 10也是如此? 怎么样:

go -> C -> C?= 20 11

go -> C -> C -> go?=? (等于什么?

基本上,执行C->goC-C调用会产生与go->C相同的惩罚,如果是这样,当链接时,此惩罚是否会成倍增加?
那是go->C->C->go =(3 * go->C)?

我希望这不是一个任意的问题,我希望别人有同样的需要并经过测试。谢谢!

1 个答案:

答案 0 :(得分:0)

基准测试表明go-> C开销很小。每次通话只需几纳秒。因此,如果这就是您的全部工作,那么您应该可以忽略开销。

另一方面,

C-> go应该有相当大的开销。按顺序开始一个新的go程序。因此,如果可能的话,最好直接避免这种情况。如果可能的话,只需重写应用程序即可使用go-> C进行检查或获取响应,因此您可以跳过C-> go,而只需执行go-> go。