ホームページ  >  記事  >  バックエンド開発  >  なぜ C コードは Python よりも高速に実行されるのでしょうか?

なぜ C コードは Python よりも高速に実行されるのでしょうか?

PHPz
PHPz転載
2023-09-11 12:45:021085ブラウズ

なぜ C コードは Python よりも高速に実行されるのでしょうか?

この記事では、C コードが Python よりも高速に実行される理由を学びます。

Guido Van Rossum は、最も有名なプログラミング言語の 1 つである Python を開発しました。 Python は、初心者でもわかりやすい 構文 とシンプルなコードのため、開発者の間で人気があります。 Python を学ぶことは、プログラミングのキャリアを始めたばかりの人にとって非常に有益です。 Python プログラミング トレーニング、ブログ、ビデオ、モジュール、その他の何千ものリソースを使用して、この人気のある言語のあらゆる側面を学ぶことができます。完了すると、GUI 開発、Web デザイン、システム管理、複雑な金融取引や計算、データ サイエンス、視覚化などの最新の開発アクティビティを実行できるようになります。

Python はインタープリタ言語であるため、C よりも遅くなります。

Python はインタープリタ言語であるため、C よりも遅くなります。

したがって、特定のステートメントを実行するには、より多くの実際の CPU 命令が必要になります。

数値 1 を追加するか、Python コード内の指定された値と比較することで、変数の値がその値より小さいか、大きいか、または正確に等しいかどうかを確認できます。

違いは、Python コードが CPU によってすぐに実行されるのではなく、解釈されることです。

パフォーマンスの点では、これは大きな違いを生みます。

Python コードを実行するには、ほぼ常に仮想マシンを使用します

仮想コンピュータの別名は「バイトコード インタプリタ」です。

解釈されたコードは、実際のマシン命令を実行するよりも命令を実装するために多くの命令を必要とするため、常に実際のマシンコードよりも遅くなります。

######例######

式 x = 1 について考えてみましょう。 Intel CPU では、レジスタのインクリメントは 1 回の操作で、レイテンシは 1、スループットは 1/3 (1/3) です。 言い換えれば、Intel プロセッサが提供できる最速の CPU 命令を指します。

Python では、x = 1 はどのように実装されますか?

これを理解するには、まず Python が内部でどのように動作するかを理解する必要があります。 Python の内部コンポーネントには、トークナイザー、字句アナライザー、バイトコード ジェネレーター、バイトコード インタープリターが含まれます -

Tokenizer
    - 指定された ASCII テキスト ファイル (Python コード) からトークンのストリームを作成します。
  • 字句アナライザー
  • - Python のこの領域には、適切なインデントとスペースが含まれます。この時点で構文チェックが実行されます。
  • バイトコード ジェネレーター
  • - 最適化が行われる場合、それらは Python コンポーネントによって行われますが、Python はコンパイル済み言語ではないため、利用可能な C コンパイラーと比較すると、最適化の範囲は次のとおりです。限定。
  • 「バイトコード インタープリター」

    として知られる Python モジュールは、バイトコード ストリームを管理し、Python 仮想マシンに電力を供給します (その状態を維持します)。
  • バイトコードは生成されると、通常、メモリにキャッシュされます。

    これにより、Python がすでに認識したコードのトークン化、字句解析、バイトコード生成プロセスを繰り返す必要がなくなるため、速度が向上します。
つまり、while ループをループするたびにトークン化、字句解析、およびバイトコード作成プロセスを実行する代わりに、バイトコードをバイトコード インタープリタに渡し続けることができます。

これのほうが早いんじゃないでしょうか?

いいえ、実際にはそうではありません。

キャッシュされたバイトコードを使用すると高速になりますが、マシンコードほど高速に実行または操作されません。

コードを実行している実際の CPU は仮想コンピューターではありません。

コンパイルプロセス

コンパイル済み UCSD Pascal は、当時の他のコンパイル済み言語とは異なり、アセンブリ言語にコンパイルされていませんでした。代わりに、それは p コードにコンパイルされます。

つまり、「コンパイルされた Pascal プログラム」について考えるとき、p-Code を思い浮かべるでしょう。 Java または Python が好きで、何か新しいことを思いついたふりをしたい場合は、「バイトコード」を使用してください。

さらに、Python には「コンパイルされた Python」という概念も含まれています。これは、バイトコード インタープリターに提供できるキャッシュされたバイトコードを作成するためにトークナイザー、レクサー、およびバイトコード ジェネレーターによって処理された Python を指します。Python コード (別名 Python 仮想マシン)。

.py 拡張子が付いたファイルは、Python ソース コードを含む ASCII テキスト ファイルです。

PYthon、コンパイル済みは、「.pyc」拡張子を持つファイルが表すものです。

それでも、仮想コンピュータは作成されたコードを実行します。

ネイティブコード

プログラムが構築されると、そのプログラムが設計されたプラットフォームのネイティブ バイナリ CPU 命令に変換されるまで、ネイティブ コードに完全には変換されません。

これには通常、アセンブリ コードを記述し、それをアセンブラに渡し、バイトコードを使用する代わりにアセンブラにプラットフォーム固有のオブジェクト ファイルを作成させることが含まれます。

プログラムはプラットフォーム ランタイムに接続するまでは使用できません。ランタイムは、動的なオブジェクトの読み込みなどのランタイム サービスを提供し、コード実行のための環境を構築できます。コンパイルされた C にはランタイムがあります。コンパイルされた C にはランタイムがあります。

Python はなぜ C よりも遅いのですか?

  • Python は広範な健全性チェックを実行します。整数がオーバーフローすることはなく、無効なメモリにアクセスすることはなく、型が (暗黙的に) 不正になることはなく、配列が末尾を超えて書き込まれたり読み取られたりすることはありません。 Python では、「非ローカル エラー」が発生することはほとんどありませんが、C では、実際に報告されたエラーではないエラーが発生することはかなり一般的です。

  • Python のコンパイラーは、非常に高度な最適化 (もしあったとしても) を行いません。たとえば、Common Lisp などでは、速度は C ほど重要ではなく、情報もそれほど多くありません。 (Python のような別の動的言語) では、C と同じ速度を得るために型の注釈を提供できます。安全性チェックをオプトアウトし、特定の変数が特定の型を持つことを約束すると、まったく同じマシンコード命令が得られます (プログラムにバグがある場合、まったく同じ奇妙な動作が発生します)。

###結論は###

この記事では、C コードが Python よりも高速に実行されるさまざまな理由を検討しました。

以上がなぜ C コードは Python よりも高速に実行されるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。