3

Pythonでプログラミングする方法は知っていますが、C++の学習にも興味があります。Pythonよりもはるかに高速であると聞いています。現在作成しているプログラムでは、できるだけ速く効率的に実行することをお勧めします。その多くは良いコードを書くことから来ることを私は知っていますが、C++などの別の言語を使用することが役立つかどうかも疑問に思いました。

私がこれを熟考している間、私のプログラムのほとんどは主にインターネットを使用するので(Google APIを実装し、それらからの情報を使用して他のWebサイトにデータを送信する場合など)、言語の速度は問題ではないことに気付きました。私のインターネット接続の速度が常に比較的同じになる場合。インターネットに接続する方法は2つあります。ブラウザを必要とするもののためのSelenium(またはある種の自動化されたブラウザ)と、HTTPリクエストだけです。

私のプログラムの主な焦点はインターネットにありますが、Pythonと別の言語の間にどのくらいの違いがありますか?

ありがとう。

4

1 に答える 1

2

シナリオ

マシンコードにコンパイルされた言語を使用することで得られる主な利点は、多くのバイトとビットマジックを実行できることです。たとえば、画像データの変更、音声の変換、ゲノム配列データベースのインデックスの分析などです。

典型的なタスク

完全に異なる種類の場合に通常問題となるWebページの提供:ハードディスクからリソースをロードするか、画像または音声の場合は直接提供するか、テキストリソースが次のようになるまでさまざまな変換手順を実行します。最終的なHTMLドキュメント。後者は、テンプレートエンジン、データベースクエリなどを使用します。

それを見ると、ほとんどのもの、たとえば90〜99%がかなり高レベルのものであることがわかります。Pythonでは、最適なパフォーマンス(つまり、時間とスペース)。「ファイルを開く」は、Pythonの場合とほぼ同じようにCでも高速になるため、ファイルから読み取り、Socketに提供します。テキストデータの変換は、PythonよりもC ++の方が少し速いかもしれませんが、...どれくらい速くする必要がありますか?使用は200ms待つことをいとわないでしょうね。そして、それは素晴らしい高レベルのテンプレートエンジンが少しのテキストを変換するための多くの時間です。

C++とPythonでできること

典型的なPythonWebサービスは、C ++で記述されたサーバーよりもはるかに高速で、展開も簡単です。C ++でそれを行う場合は、最初にソケットと接続を処理する必要があります。それらの場合は、既存のライブラリを使用するか、独自の処理を記述します。既存のライブラリ(私が強くお勧めします)を使用する場合、基本的にPythonとは異なることは何もしていません。あなたがあなた自身の取り扱いを書くならば、あなたはあなたが望むパフォーマンスを燃やすであろうあなたが間違ってすることができる多くの多くの低レベルのことを持っています。いいえ、それはオプションではありません。

速度が必要で、Pythonとサーバーおよびテンプレートのフレームワークでは不十分な場合は、アーキテクチャのアプローチを再考する必要があります。次に、c10k問題を見て、Cで小さな部分を書きます(このc10kの非常にホットなトピックも見てください)しかし、Pythonのような高級言語を使用しない理由は、見ているだけではわかりません。中程度の複雑なWebサービスアプリケーションでのパフォーマンス。

要約:違い

ハードドライブからファイルを提供しているだけの場合、Pythonプログラムは手作りのC++サーバーよりもさらに高速になると思います。CまたはC++で記述されたフレームワークを使用し、静的ページをドロップするだけの場合、Pythonに対して2〜5倍のブーストが得られると思います。繰り返しになりますが、Webアプリケーションが静的コンテンツを提供するよりも少し複雑な場合、違いは非常に急速に減少し、最大で1〜2倍の速度向上が得られると推定されます。

スピードだけではありません...

C ++とPythonのもう1つの違いについて、忘れてはなりません。C++は実際にコンパイルされており、Pythonほど動的ではないため、Pythonを使用すると多くの静的エラー分析が得られます。正しいコードを書くことは常に困難ですが、C ++とPythonでは、優れたテスト静的分析を使用して行うことができます。後者はC ++の方が簡単です(私の意見)。それがあなたにとって問題であるならば、あなたはもう一度考えるかもしれません、しかしあなたはスピードについて尋ねました。

于 2012-11-26T11:06:58.210 に答える