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]