N
多数のクライアント ( = 10 ~ 100)にサービスを提供するネットワーク製品のバックエンドを開発しています。各接続には、2 つの定期的なタスク、ハートビート、および SSH を介したテレメトリのダウンロードがそれぞれH
Hz で必要です。フロントエンドから来る別の種類の追加イベントもあります。すべてのタスクの性質上、select
各接続のソケットで待機中の確実な部分があります。これにより、OS は、応答を待っている間に他のクライアントにサービスを提供するためにスレッド間を頻繁に切り替えることができます。
私の最初の実装では、接続ごとに 3 つのスレッド (ハートビート、テレメトリー、エクストラ) を作成し、それぞれが単一の条件変数を待機しています。ワークキューは、タイマーとフロントエンドからのコマンドを使用して、上記の定期的なイベントで満たされます。
ここでいくつか質問があります。
ワーカー スレッド プールのアプローチを Intel TBB タスクに切り替えるのは良い考えでしょうか? もしそうなら、スレッドのどの値に初期化する必要があります
tbb::task_scheduler_init
か?300 スレッドが条件変数 ( 1 秒あたり
signal
edN * H * 3
回) を待機している現在のアプローチでは、スケーラビリティのボトルネックになる可能性があります (特に を呼び出す側でsignal
)。タスクごとにワーカーを 1 つだけ起動するためのより良い方法はありますか?ワーカー スレッドのウェイクは TBB でどのように実装されていますか?
ご提案いただきありがとうございます。