2013-02-21 5 views
8

私はコード内で非常に重要な場所で現在実行中のスレッドのIDを使用するつもりです。そのIDをどこかにキャッシュするか、メソッドを呼び出すかを選択する必要があります(UNIXのようなシステムの場合はgettid、ウィンドウの場合はGetCurrentThreadId)毎回それを得るために。それはより良いですか?スレッドIDがシステムコールを取得していますか?現在のスレッド時間のIDを取得する操作が高価ですか?

答えて

0

いいえ、高価な呼び出しではありません。これはシステムコールなのですが、高価なものからは遠いです。明らかに、シンプルな変数に値をキャッシュすることができれば、それは10倍の速さになります。

しかし、すべてのパフォーマンス関連のクエリと同様に、実際にはベンチマークに劣ります。単一のスレッドを使用し、スレッドIDを取得するために関数を呼び出すこと、そして何をしたいのかを簡単に設定できます。それで何らかのテストを実行するのにかかる時間を測定します。次に、スレッドIDの呼び出しを同じ範囲の定数値に置き換えて、それがどのように機能するかを確認します。

7

少なくともWindowsでは、GetCurrentThreadId()で、かなりであり、システムコールは必要ありません。独自の変数ではなく、多くの値をキャッシュにはほとんど利益があるかもしれません

int GetCurrentThreadId() { 
    _asm { 
     mov eax, fs:[18h] 
     mov eax, [eax+24h] 
    } 
} 

:基本的にはということになります。主な利点は、変数を頻繁に使用される他の変数と一緒に保存するとローカリティ(つまりキャッシュの使用率)が向上する可能性があります。

メモリのフェッチ(またはおそらく2つ)を排除する可能性があるようなタイトなループで作業しているのでなければ、それが返す値をキャッシュすることはあまりありません。

+1

私はUnixが同じことをしているのを見ましたが(しかしgsでは重要ではありません)。だから、あなたの答えは複数のプラットフォームで正しいです。それは非常に安いです。 – boiler96

関連する問題