Python和C++编写block

在gnuradio中可以使用Python编写模块,也可以使用C++编写。

看到官网上说使用Python编写对性能要求不高的模块,开始很不理解。后来使用Python编写了双差分调制和解调模块,终于意识到Python和C++的性能上还是差很多的。

由于Python是一种解释型语言,而且语法比较简单,使用Python编写模块确实比较简单,而且可以快速开发,即时测试。

而C++作为一种编译型语言,每次修改之后都需要重新编译、安装,需要重复输入很多命令,也很浪费时间,而且C++语法也比较复杂。

Python的一个不足在于多线程。据说Python是仅有的支持多线程的解释型语言,虽然如此,Python并非是真正的多线程,在Python中存在全局解释器锁,在任意时刻只有一个Python在解释Python code。

引用知乎上的解释:

+++++++++++++++++++++++++

如果你的代码是CPU密集型,多个线程的代码 很有可能是线性执行的。所以这种情况下多线程是鸡肋,效率可能还不如单线程因为有context switch

但是:如果你的代码是IO密集型,多线程可以明显提高效率。例如制作爬虫(我就不明白为什么Python总和爬虫联系在一起…不过也只想起来这个例子…),绝大多数时间爬虫是在等待socket返回数据。这个时候C代码里是有release GIL的,最终结果是某个线程等待IO的时候其他线程可以继续执行。

反过来讲:你就不应该用Python写CPU密集型的代码…效率摆在那里…

作者:yegle
链接:https://www.zhihu.com/question/23474039/answer/24695447
++++++++++++++++++++++++++
这可能就是在gnuradio中Python所编写的模块性能不如C++的原因。将使用Python编写的双差分模块添加到流图中,并通过USRP进行实测,可以看到,在信息窗口中会不断的显示UUUUUUUUUUUUUU。即使是软件仿真,如果将信息在信息窗口打印的话,也可以看到Python编写的双差分模块的处理速度比C++编写的双差分模块慢的多。

你可能感兴趣的:(C++,python,gnuradio)