据我所知,当使用cgo
时,每次go - > C函数调用都会受到性能影响。在尝试优化我的程序时,我想知道滞后的位置,以便我可以减少这些事件的发生。所以在假设的任意值(因为我没有实际的通话时间)......
如果(开始假设)
|通话类型|时间(任意单位)| --- | --- | go->go
| 1
| go-> C | 10
问题,是吗:C->go
= 10
?
怎么样:
go -> C -> C
?= 20
或~11
?
go -> C -> C -> go
?=? (等于什么?)
基本上,C->go
和C-C
的召唤与go->C
会产生同样的惩罚,如果是这样的话,当链接时,这种惩罚是否会成倍增加?
那是go->C->C->go
=(3 * go->C
)?
我希望这不是一个过于武断的问题,我希望其他人有同样的需求并经过测试。谢谢!
基准测试说go-> C是非常微不足道的开销。每次通话只需几纳秒。所以如果这就是你所做的,那么你应该能够忽略开销。
C->另一方面应该有相当大的开销。按照开始新的计划的顺序。所以尽可能直接避免这种情况。如果可能的话,只需重写您的应用程序,让go-> C检查事物或获得响应,这样您就可以跳过C-> go而不是go-> go。