Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python和C之间的性能差异_Python_C_Performance - Fatal编程技术网

Python和C之间的性能差异

Python和C之间的性能差异,python,c,performance,Python,C,Performance,在不同的项目中工作,只要任务完成,我就可以选择不同的编程语言 我想知道,在性能方面,用Python编写程序与用C编写程序的真正区别是什么 要完成的任务多种多样,例如排序文本文件、磁盘访问、网络访问、文本文件解析 例如,在C语言中使用相同的算法对文本文件进行排序与在Python中使用相同的算法进行排序是否真的有明显的区别 根据您的经验,考虑到当前CPU(i7)的强大功能,这真的是一个明显的区别吗(考虑到它是一个不会让系统屈服的程序)。一般来说,IO绑定的工作更多地取决于算法,而不是语言。在本例中,

在不同的项目中工作,只要任务完成,我就可以选择不同的编程语言

我想知道,在性能方面,用Python编写程序与用C编写程序的真正区别是什么

要完成的任务多种多样,例如排序文本文件、磁盘访问、网络访问、文本文件解析

例如,在C语言中使用相同的算法对文本文件进行排序与在Python中使用相同的算法进行排序是否真的有明显的区别


根据您的经验,考虑到当前CPU(i7)的强大功能,这真的是一个明显的区别吗(考虑到它是一个不会让系统屈服的程序)。

一般来说,IO绑定的工作更多地取决于算法,而不是语言。在本例中,我将使用Python,因为它将具有一流的字符串和许多易于使用的库来操作文件,等等

例如,在C语言中使用相同的算法对文本文件进行排序与在Python中使用相同的算法进行排序是否真的有明显的区别

值得注意的区别是

  • Python代码要少得多

  • Python代码更易于阅读

  • Python支持非常好的单元测试,因此Python代码的质量往往更高

  • 您可以更快地编写Python代码,因为古怪的语言特性更少。例如,没有预处理器,真的节省了大量的黑客攻击。经验丰富的C程序员几乎没有注意到这一点。但是所有的
    #包括
    三明治,并且使
    .h
    文件正确无误非常耗时

  • Python可以更容易地进行打包和部署,因为您不需要一个大型的make脚本来进行构建


  • 使用python直到出现性能问题。如果你曾经有过一次机会,你会发现问题是什么(通常不是你事先猜到的)。然后解决可能是算法或数据结构更改的特定性能问题。如果你的问题确实需要C语言,那么你可以用C语言编写这一部分,并从python代码中使用它。

    计算机性能问题的第一条规则:你的里程数会有所不同。如果小的性能差异对您很重要,那么获得有效信息的唯一方法就是使用配置、数据和基准测试。比如说,这里的“小”是两个左右的因子

    计算机性能问题的第二条规则:对于大多数应用程序来说,性能并不重要——编写应用程序的最简单方法可以提供足够的性能,即使当问题扩大时也是如此。如果是这样的话(通常也是这样),不要担心性能

    也就是说:

    • C编译为机器可执行文件,因此有可能执行速度至少与任何其他语言一样快
    • Python通常是解释的,因此可能比编译语言占用更多的CPU
    • 很少有应用程序是“CPU受限”的。I/O(到磁盘、显示器或内存)不受编译或解释考虑因素的影响,通常是花在应用程序上的计算机时间的主要部分
    • Python比C具有更高的抽象级别,因此您的开发和调试时间可能更短
    我的建议是:用你认为最容易使用的语言进行发展。让程序正常工作,然后检查是否有足够的性能。如果像往常一样,性能足够,那么您就完成了。如果没有,请概述您的特定应用程序,以了解哪些应用程序花费的时间超出预期或可容忍的时间。查看是否以及如何修复应用程序的该部分,并根据需要重复


    是的,有时你可能需要放弃工作,重新开始,以获得所需的绩效。但拥有一个运行(尽管速度较慢)的应用程序版本将大大有助于取得进展。当你达到并征服了这个性能目标时,你将用SO来回答性能问题,而不是问它们。

    如果你正在排序和解析的文本文件很大,请使用C。如果它们不是,则无所谓。不过,您可以用任何语言编写糟糕的代码。我见过C中计算三角形面积的简单代码运行速度比其他C代码慢10倍,这是因为内存管理差、使用结构、指针等


    I/O算法应该独立于计算算法。如果是这样的话,那么使用C作为计算算法会快得多。

    C绝对会在几乎所有性能类别中击败Python,但C编写和维护起来要困难得多,而且高性能并不总是值得在增加的时间和开发难度之间进行权衡

    你说你在做文本文件处理之类的事情,但你忽略了你在做多少文本文件处理。如果您每小时处理1000万个文件,您可能会受益于用C编写它。但是如果您每小时处理100个文件,为什么不使用python呢?你真的需要在10毫秒和50毫秒内处理一个文本文件吗?如果你在为未来做计划,问问自己,“这是我以后可以投入更多硬件的事情吗?”


    用C编写可靠的代码是很难的。请确保您可以证明在这方面的投资是合理的。

    这在很大程度上取决于您所做的工作,以及所讨论的算法是否在Python中通过本机编译的库可用。如果是的话,那么我相信您将仔细查看性能数据,Python很可能是您的答案——假设它是您的首选语言。如果必须自己实现算法,则根据所需的逻辑量和数据集的大小,C/C++可能是更好的选择。如果没有更多的信息,很难给出一个不那么模糊的答案。

    (假设-这个问题意味着作者熟悉C语言,但不熟悉Python,因此我将以我的答案为基础