特定の時間間隔の後にソケットにデータを書き込もうとしています。2 つのスレッドがあり、1 つのスレッドは TCP 接続を維持し、もう 1 つのスレッドはデータを生成します。
データ生成モジュールは、データを生成し、共有メモリに書き込みます。サーバー スレッドは、共有メモリからデータを読み取り、それをクライアントに送信します。
しかし、データ生成スレッドが遅くなると、多くの計算が関係し、サーバー スレッドがクライアントに書き込もうとすると EWOULDBLOCK エラーが発生します。しかし、驚くべきことに、クライアント側から見ると、そのようなエラーはありません。
私が間違っていなければ、EWOULDBLOCK エラーは、サーバーがクライアントよりも高速であり、ソケット バッファーが再度書き込まれる前に完全に読み取られていない場合に返されます。しかし、ここでは全く逆です。
データ生成スレッドが完了するまでサーバー therad がスリープ状態に保たれていることが原因である可能性があります (データ スレッドの優先度が高い)。
誰かがここで何が起こっているのか説明できますか?