Linux 上の同じプロセスのスレッド間のコンテキスト切り替えのコストに関する適切な経験的データはありますか (主に x86 と x86_64 が重要です)。私は、あるスレッドがユーザー空間で実行する最後の命令と、自発的または非自発的にスリープ状態になる前のサイクル数またはナノ秒数と、同じ cpu/コアでウェイクアップした後に同じプロセスの別のスレッドが実行する最初の命令について話している.
同じ CPU/コアに割り当てられた 2 つのスレッドで常に実行rdtsc
し、結果を volatile 変数に格納し、姉妹スレッドの対応する volatile 変数と比較する簡単なテスト プログラムを作成しました。姉妹スレッドの値の変更を初めて検出すると、違いが出力され、ループに戻ります。この方法で、Atom D510 CPU で約 8900/9600 サイクルの最小/中央値を取得しています。この手順は合理的で、数字は信頼できると思いますか?
私の目標は、最新のシステムで、接続ごとのスレッド サーバー モデルが選択型の多重化と競合するか、それを上回るかどうかを見積もることです。X
fd で IO を実行することから fd への移行Y
は、複数のシステムコールではなく、あるスレッドでスリープ状態になり、別のスレッドで起動するだけであるため、理論的にはもっともらしいようですが、コンテキスト切り替えのオーバーヘッドに依存します。