3

マルチスレッドを使った高性能なサーバープログラムの問題を知りたいです。

  1. epoll は TCP ソケットのリッスンとソケット接続を処理でき、メイン スレッドで epoll_wait を使用できます。ソケット接続が来ている場合、プログラムは接続を受け入れ、作業スレッドでデータを受信できます。ワークスレッド間に競合はありません。私は正しいですか?

    udp はコネクションレス プロトコルですが、recvfrom 関数をすべてのワーク スレッドで同時に使用できますか? メインスレッドは epoll を使用して、ワークスレッドがデータを受信したことを通知します。(各 UDP パケットを個別に処理できると仮定します)。

  2. これは UDP サーバーです。ノンブロッキングソケットで動作するように設定しました。メインスレッドでデータを受信して​​処理し、それをタスクキューに送信します。タスクキューにデータがある場合、プログラムはワークスレッドをウェイクアップしてタスクキューをロックし、タスクキューからデータを取得し、タスクのロックを解除します他の作業スレッドがタスク キューからタスクを取得し、それを処理できるようにキューに入れます。

    これは良いマルチスレッド UDP サーバーですか?よくわかりません。高性能な UDP サーバーの別の設計はありますか。</p>

    私はこの質問について困惑しています。どうもありがとうございました!</p>

4

1 に答える 1