Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

付録A 開発者に関するヒント

適切なプログラミングテキストブックはすべて、メモリー割り当ての問題と、特定の機能のパフォーマンスを説明します。ソフトウェアを開発する際には、ソフトウェアが実行されるシステムの消費電力を向上させる可能性がある問題に注意してください。これらの考慮事項は、コードごとに影響を与えませんが、パフォーマンスでボトルネックとなるエリアでコードを最適化することができます。
問題が生じるいくつかの手法には、以下が含まれます。
  • スレッドの使用
  • ウェイクアップを効率的に使用せず、不要な CPU ウェイクアップも使用しません。ウェイクアップを実行する必要がある場合は、すべてを一度に(アイドル状態に)、できるだけ早期に実施してください。
  • [f]sync() を不必要に使用している。
  • 不要なアクティブなポーリングまたは短期タイムアウトの使用。(代わりに events に反応)
  • ウェイクアップを効率的に使用していません。
  • 非効率なディスクアクセス。ディスクアクセスが頻繁に行われないように、大きなバッファーを使用します。一度に 1 つの大きなブロックを書き込みます。
  • タイマーの非効率の使用。可能であれば、複数のアプリケーション(またはシステム全体で)タイマーをグループ化します。
  • 過剰な I/O、電力消費、またはメモリー使用量(メモリーリークを含む)
  • 不必要な計算の実行。
以下のセクションでは、これらの領域についてさらに詳しく説明します。

A.1. スレッドの使用

一般的に、スレッドを使用するとアプリケーションのパフォーマンスが向上し、高速になると思われていますが、これはすべてのケースで当てはまるわけではありません。

Python

Python はグローバルロックインタープリターを使用します。[1]、スレッドは大規模な I/O 操作のみを対象とします。Unladen-swallow[2] は、コードを最適化する可能性のある Python を迅速に実装しています。

perl

Perl スレッドは、最初にフォークなしでシステムで実行されるアプリケーション用に作成されました(32 ビットの Windows オペレーティングシステムがあるシステムなど)。Perl スレッドでは、データはすべての単一スレッド(Copy On Write)に対してコピーされます。ユーザーはデータ共有レベルを定義できるため、データはデフォルトでは共有されません。threads::shared モジュールを保存するには、含める必要があります。ただし、データはコピーされません(Copy On Write)。ただし、モジュールはデータの関連する変数も作成します。これはさらに時間がかかり、時間がかかります。[3]

C

C スレッドは同じメモリーを共有します。各スレッドには独自のスタックがあり、カーネルは新しいファイル記述子を作成し、新しいメモリー領域を割り当てる必要はありません。C は、より多くのスレッドにより多くの CPU のサポート を参照してください。したがって、スレッドのパフォーマンスを最大化するには、C や C++ などの低レベルの言語を使用します。スクリプト言語を使用する場合は、C バインディングの作成を検討してください。プロファイラーを使用して、コードの一部を不適切に実行することを特定します。[4]