在 Golang 中同时写入 Net.Conn
多个 Goroutines 可以同时向共享 net.Conn 对象发出 Write 调用。但是,对于部分完成的写入的处理会出现问题。
写入的锁获取
在 Unix 实现中,对 Write 的调用使用锁来防止同时写入。这种锁获取似乎破坏了多个 Goroutines 并发 Write 调用的目的。
处理部分完成的写入
在 Unix 实现中,唯一的情况是 byteSent
len(buf) 可能发生在遇到错误时。 Write 实现包括一个循环来处理部分写入,确保写入整个缓冲区。
Windows 上的 WSASendWindows 实现缺少此循环。相反,它依赖于 WSASend,后者必须提供类似的保证来处理部分写入并避免阻塞情况。
已解答的问题以上是Golang如何保证Net.Conn对象的并发写操作安全高效?的详细内容。更多信息请关注PHP中文网其他相关文章!