Red Hat Training

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

付録A 開発者のヒント

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

A.1. スレッドの使用

スレッドを使用するとアプリケーションのパフォーマンスが向上しますが、これはいずれの場合でも当てはまるわけではありません。

Python

Python は Global Lock Interpreter を使用します。[1]したがって、スレッドは大規模な I/O 操作のみで対応できます。unladen-swallow [2] は Python のより高速な実装で、コードを最適化できる可能性があります。

Perl

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

C

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