コード内の非常にパフォーマンスが重要な場所で現在実行中のスレッドの id を使用するので、その id をどこかにキャッシュするか、メソッド ( gettid
unix のようなシステムとGetCurrentThreadId
Windows の場合) を呼び出して毎回取得するかを選択する必要があります。時間。それで、どれが良いですか?スレッド ID の取得はシステム コールですか?
2 に答える
少なくとも Windows では、GetCurrentThreadId()
非常に安価で、システム コールを必要としません。基本的には次のようになります。
int GetCurrentThreadId() {
_asm {
mov eax, fs:[18h]
mov eax, [eax+24h]
}
}
独自の変数に値をキャッシュすることには少しの利点がありますが、それほど多くはありません。主な利点は、変数を他の頻繁に使用される変数と一緒に保存すると、局所性 (したがってキャッシュの使用) が向上する可能性があることです。
そのため、メモリ フェッチ (または 2 回) をなくす可能性が非常に高いほどタイトなループに取り組んでいない限り、返される値をキャッシュすることで多くのメリットが得られる可能性は低くなります。
いいえ、高額な通話ではありません。これはシステムコールなどですが、高価なものとはほど遠いものです。明らかに、値を単純な変数にキャッシュできる場合は、10倍高速になります。
しかし、すべてのパフォーマンス関連のクエリと同様に、それは実際にはベンチマークにかかっています。単一のスレッドを使用するように設定したり、関数を呼び出してスレッドIDを取得したり、やりたいことを実行したりするのは非常に簡単です。それを使ってテストを実行するのにかかる時間を測定します。次に、スレッドIDの呼び出しを同じ範囲の定数値に置き換えて、それがどのように機能するかを確認します。