Red Hat Training

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

付録A 開発者向けのヒント

優れたプログラミングの参考書はすべて、メモリー割り当てと特定の関数のパフォーマンスに関する問題をカバーしています。ソフトウェアを開発するときは、ソフトウェアが実行するシステムの電力消費を増加させる可能性がある問題に注意してください。これらの考慮事項はすべてのコード行に影響するわけではありませんが、パフォーマンスのボトルネックとなることが多い領域でコードを最適化できます。
問題となることが多いテクニックには、次のようなものがあります。
  • スレッドを使用します。
  • 不必要な CPU ウェイクアップが発生し、ウェイクアップを効率的に使用していません。起動しないといけない場合は、(アイドリングに対して) すべてを一度に、できるだけ早く行います。
  • を使用して[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 モジュールを含める必要があります。ただし、データがコピーされるだけでなく (Copy On Write)、モジュールはデータに関連付けられた変数も作成します。これにはさらに時間がかかり、さらに遅くなります。[3]

C

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