C++与Python之间的切换控制代价

2024-09-27 00:22:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个用Python扩展/脚本化的C++应用程序。当然,C++比Python更快,但这是否意味着你应该尽可能频繁地在Python代码上执行C++代码?在

我问这个是因为我不确定,在C++编写的代码和用Python编写的代码之间是否有切换控制的性能开销?我是否应该在每个场合使用C++编写代码,或者我应该避免调用C++来执行简单的任务,因为从执行C++代码中获得的任何速度增益都与语言间切换的成本相匹配?在

编辑:我应该说清楚,我要求这样做并不是为了解决问题。我问这个问题纯粹是出于好奇,这是一件值得铭记的事,为将来着想。所以我对其他解决方案不感兴趣,我只想从技术角度知道答案。:)


Tags: 代码脚本语言应用程序编辑增益解决方案性能
3条回答

成本是存在的,但可以忽略不计。这是因为你可能会做一个公平的工作,将Python的高级数据类型转换为C++兼容的表示。当然,这类似于调用一个C++函数从另一个函数调用的开销,但存在一些开销。当从Python切换到C++时,最好的规则是:

无参数函数

对少量数据进行大量处理的一种函数

一种尽可能少被调用的函数-如果可能的话,合并函数调用

保持简单,并根据需要调整性能。在C++应用程序中嵌入解释器的主要原因是允许运行时配置/数据指定一些处理,也就是说,可以修改脚本而不必重新编译C++程序——这是您何时调用解释器的指南。在某些解释器调用中,调用C++的主要原因是:

  • 访问或更新一些不能作为参数公开给调用的数据(或通过解释器支持的其他注册过程)
  • 在处理的某些关键部分获得更好的性能
对于后者,首先尝试脚本(假设它在那里很容易开发),那么如果它很慢,那么就可以识别C++代码在哪里以及如何帮助。当/如果在哪里,性能确实是一个问题——作为一般准则,当从C++调用到解释器或反之亦然:尝试尽可能多地排列工作,然后调用到另一个系统。如果遇到问题,请返回stackoverflow,并提供具体问题和实际代码。在

我不知道这有什么具体的规则,但很多人遵循的一个普遍规则是:

  • python中的原型。这样写起来更快,而且可能更容易阅读/推理。在
  • 一旦有了一个原型,现在就可以识别出应该用c++编写的慢部分(通过分析)。在
  • 根据代码的域不同,慢比特通常与“内部循环”类型的代码隔离开来,因此python与此代码之间的切换次数应该相对较少。在
  • 如果你的程序足够快,你就成功地避免了用c++编写太多代码而过早地优化代码。在

相关问题 更多 >

    热门问题