在 Golang 中同時寫入 Net.Conn
多個 Goroutines 可以同時向共享 net.Conn 物件發出 Write 呼叫。但是,對於部分完成的寫入的處理會出現問題。
寫入的鎖定獲取
在 Unix 實作中,對 Write 的呼叫使用鎖定來防止同時寫入。這種鎖獲取似乎破壞了多個 Goroutines 並發 Write 呼叫的目的。
處理部分完成的寫入
在Unix 實作中,唯一的情況是byteSent
len(buf) 可能發生在遇到錯誤時。 Write 實作包含一個迴圈來處理部分寫入,確保寫入整個緩衝區。
Windows 上的 WSASendWindows 實作缺少此迴圈。相反,它依賴 WSASend,後者必須提供類似的保證來處理部分寫入並避免阻塞情況。
已解答的問題以上是Golang如何確保Net.Conn物件的並發寫入作業安全且有效率?的詳細內容。更多資訊請關注PHP中文網其他相關文章!