スレッドの作成と起動に必要な時間を測定するにはどうすればよいですか?(Linux、pthreadまたはboost :: thread)。
アドバイスありがとうございます!
スレッドの作成と起動に必要な時間を測定するにはどうすればよいですか?(Linux、pthreadまたはboost :: thread)。
アドバイスありがとうございます!
少なくとも 2 つの解釈が考えられるため (元のスレッドが内部で「ビジー」でpthread_create
ある時間と、呼び出しpthread_create
から他のスレッドが実際に最初の命令を実行するまでの時間) があるため、正確に何を測定したいかを指定する必要があります。
どちらの場合でも、呼び出しの前後または呼び出しの前に、およびスレッド関数内の最初のものとして使用clock_gettime
して、単調なリアルタイムでクエリを実行できます。次に、最初の値から 2 番目の値を引きます。CLOCK_MONOTONIC
pthread_create
これは、スレッドが実際に使用した時間のみをカウントするため、内部phtread_create
で費やされた時間を知ることは別の方法です。CLOCK_THREAD_CPUTIME_ID
ただし、全体として、この種のものを測定することは少し無意味です. 未知のプロセスと未知のスケジューリング戦略と優先順位を使用して、システムまたは別のシステムの実際の条件下でどのように動作するかについては、ほとんど、またはまったくわかりません。
別のマシンまたは別の日に、スレッドが 100 または 200 ミリ秒後にスケジュールされる場合があります。これが起こらないという事実に頼るなら、あなたは死んでいます。
編集:
上記のコメントに追加された情報に関して、「通常のスケジューリング量子」の範囲内にある規模で「非定期的にアクションを実行する」必要がある場合は、nanosleep
15または30の単一のスレッドを作成するだけですミリ秒。もちろん、sleep はそれほど正確でもなく、信頼できるものでもないので、代わりにtimerfd
(移植性が最優先事項でない場合は、シグナル配信タイマーを使用して) でブロックすることをお勧めします。単一のタイマー/待機で不規則な間隔をスケジュールすることは大きな問題ではありません。次のイベント
の期日を追跡するだけで済みます。これは、最新のオペレーティング システムでも行われている方法です (「タイマー結合」を参照してください)。