问题:
与 Go 并发范例相比,TCPListener。 Go 中的 Accept() 函数是一个阻塞系统调用,这似乎与该语言对并发通道的关注相矛盾。似乎没有对带有 Accept() 的 select() 或控制阻塞行为的选项的固有支持。
答案:
关于每个单独的 Goroutine 的担忧监听套接字有效。 Go 例程是由运行时管理的轻量级线程,因此适合阻塞操作。运行时有效地在这些例程中进行选择,无需可见机制即可提供所需的行为。
要实现具有超时的类似选择的操作,请考虑以下方法:
在 select 语句中监视 newConns 通道:
通过使用通道和 goroutine,这种方法允许复用侦听器活动并处理超时,同时仍然遵循 Go 的并发模型。
以上是尽管阻塞,TCP Accept 如何适应 Go 的并发模型?的详细内容。更多信息请关注PHP中文网其他相关文章!