複数のゴルーチンは net.Conn オブジェクトに同時に書き込みできますか?
複数のゴルーチンは net.Conn オブジェクトへの書き込み呼び出しを同時に発行できます。この機能は、net.Conn のドキュメントで明示的に説明されています。
複数のゴルーチンが Conn 上のメソッドを同時に呼び出すことができます。
書き込み実装のロック
Unix 実装では、conn.Write メソッドはロックを取得して、基礎となるファイル記述子を保護します。このロックにより、複数の Write 呼び出しを発行するときにバイトが部分的に書き込まれる可能性が排除されます。
Windows の実装
Windows の実装では、Unix のようなループは使用されません。実装。代わりに、WSASend 関数に依存します。 WSASend の動作により、ロックを必要とせずにすべてのバイトが書き込まれることが保証されます。
Unix 実装への影響
Unix 実装では、部分的な書き込みのみが期待できます。基礎となる関数 (write など) がエラーを返した場合。エラーが発生しなければ、すべてのバイトは正常に書き込まれています。
WSASend の同等のループ
Windows の WSASend 関数は、Unix 実装のループと同様の保証を提供します。これにより、制御を返す前にすべてのバイトが書き込まれることが保証され、別個のループの必要がなくなります。
以上がゴルーチンはデータを破損することなく net.Conn オブジェクトに同時に書き込むことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。