场景
使用编译为机器代码的语言所获得的主要好处是,您可以执行大量字节和位魔术。比方说,修改图像数据、转换音频、分析基因组序列数据库的索引。
典型任务
提供完全不同的网页通常会遇到问题:您将从硬盘加载资源,如果它是图像或音频则直接提供它们,或者您将对文本资源执行不同的转换步骤,直到它成为最终的 HTML 文档。后者将使用模板引擎、数据库查询等。
如果你看一下,你会发现大多数东西,比如 90-99% 都是相当高级的东西——在 Python 中,你将使用一个由许多用户优化的 API 以获得最佳性能(意思是:时间和空间)。“打开文件”在 C 中的速度几乎与在 Python 中一样快,因此读取文件并将其提供给某个 Socket 也是如此。在 C++ 中转换文本数据可能比在 Python 中要快一些,但是......它必须有多快?一个用户很可能愿意等待200ms,不是吗?对于一个漂亮的高级模板引擎来转换一些文本来说,这需要很多时间。
C++ 和 Python 能为您做什么
与用 C++ 编写的服务器相比,典型的 Python Web 服务编写起来要快得多,部署起来也更容易。如果您要在 C++ 中执行此操作,您首先需要处理套接字和连接——对于那些将使用现有库或编写您自己的处理。如果您使用现有的库(我强烈推荐),那么您基本上没有做任何与 Python 不同的事情。如果您编写自己的处理程序,那么您可能会做很多很多低级的事情,这些事情会破坏您想要的性能。不,这不是一个选择。
如果您需要速度,而 Python 以及服务器和模板框架还不够,您应该重新考虑您的架构方法。然后看看c10k-problem并用 C 编写小片段。(也看看这个 c10k 非常热门的话题)但是我看不出有很多理由不使用像 Python 这样的高级语言,如果你只是看用于中等复杂的 Web 服务应用程序的性能。
总结:区别
如果您只是从硬盘驱动器提供文件,我猜您的 Python 程序甚至会比您手工制作的 C++ 服务器更快。如果你使用一个用 C 或 C++ 编写的框架并且只是放入你的静态页面,我猜你会得到比 Python 高 2-5 倍的提升。再说一次,如果您的 Web 应用程序比提供静态内容更复杂一点,我估计差异会很快减小,并且您最多会获得 1-2 倍的速度增益。
这不仅仅是关于速度...
关于 C++ 和 Python 之间另一个区别的注意事项不应该忘记:由于 C++ 是真正编译的并且不像 Python 那样动态,因此使用 Python 可以获得大量静态错误分析。编写正确的代码总是很困难,但可以在 C++ 和 Python 中通过良好的测试和静态分析来完成——后者在 C++ 中更简单(我认为)。如果这对你来说是个问题,你可能会再想一想,但你问的是速度。