問題:
與 Go 並發範例相比,TCPListener。 Go 中的 Accept() 函數是一個阻塞系統調用,這似乎與語言對並發通道的關注相矛盾。似乎沒有對具有 Accept() 的 select() 或控制阻塞行為的選項的固有支援。
答案:
關於每個單獨的 Goroutine 的擔憂監聽套接字有效。 Go 例程是由執行時間管理的輕量級線程,因此適合阻塞操作。運行時有效地在這些例程中進行選擇,無需可見機制即可提供所需的行為。
要實現具有超時的類似選擇的操作,請考慮以下方法:
在 select 語句中監視 newConns 通道:
透過使用通道和 goroutine,這種方法允許復用偵聽器活動並處理超時,同時仍然遵循 Go 的並發模型。
以上是儘管阻塞,TCP Accept 如何適應 Go 的並發模型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!