マルチスレッドを使った高性能なサーバープログラムの問題を知りたいです。
epoll は TCP ソケットのリッスンとソケット接続を処理でき、メイン スレッドで epoll_wait を使用できます。ソケット接続が来ている場合、プログラムは接続を受け入れ、作業スレッドでデータを受信できます。ワークスレッド間に競合はありません。私は正しいですか?
udp はコネクションレス プロトコルですが、recvfrom 関数をすべてのワーク スレッドで同時に使用できますか? メインスレッドは epoll を使用して、ワークスレッドがデータを受信したことを通知します。(各 UDP パケットを個別に処理できると仮定します)。
これは UDP サーバーです。ノンブロッキングソケットで動作するように設定しました。メインスレッドでデータを受信して処理し、それをタスクキューに送信します。タスクキューにデータがある場合、プログラムはワークスレッドをウェイクアップしてタスクキューをロックし、タスクキューからデータを取得し、タスクのロックを解除します他の作業スレッドがタスク キューからタスクを取得し、それを処理できるようにキューに入れます。
これは良いマルチスレッド UDP サーバーですか?よくわかりません。高性能な UDP サーバーの別の設計はありますか。</p>
私はこの質問について困惑しています。どうもありがとうございました!</p>