2011-07-18 5 views
2

私は接続を受け入れる別のスレッドを起動するC++クラスを実装しました(boost::asio)。クラス全体は、より大きなプログラムのための非同期の "コマンドレシーバ"であることが意図されています。アクセプト付きブーストスレッドのパフォーマンス/優先度

主な問題は、着信接続を待っているとき、スレッドが実質的にアイドル状態であることです。私の知覚は、これはプロセッサ時間(およびハードウェアスレッド)を無駄にして無駄にすることです。より低い優先順位のスレッドを実行する方法はありますか、スレッドをメインプログラムに干渉させないようにする方法はありますか?これはタスク集約的でスレッド化されていますか?

答えて

3

使用しているクラスがaccept呼び出しを行っている場合、スレッドはブロックされ、OSがいくつかの処理を行うのを待っています。 SOスレッドがある、それがそうならば、それはどちらかのシステムコール(あなたが変更される可能性が何もない)、または内

  • 、任意のCPUのressourcesを消費することはない(必要がある)
  • タイムアウトとあり
  • スレッドはacceptに再度ループしています。 これを変更するパラメータがある場合は試してみてください!
+0

あなたは正しいと思います。私は、threasがリソースを消費しているpsで何の証拠も得られません。 ありがとうございます! –

1

ブーストスレッドクラスを使用していると仮定すると、ブーストスレッドでnative_handle()ハンドル関数を使用してスレッド優先度を変更できます。 Hereは小さな例です。

しかし、まず、本当に問題があることを確認することをお勧めします。あなたが懸念しているスレッドは、とにかく有効にアイドル状態になっているはずです。

+0

私の他のコメントと同じです:Dありがとう、あなたが提案したコードは、他の目的のために役立つでしょう。 +1;) –

関連する問題