gpt4 book ai didi

multithreading - 多个 goroutine 会同时调用 Conn 上的方法吗?

转载 作者:数据小太阳 更新时间:2023-10-29 03:38:42 24 4
gpt4 key购买 nike

我的程序是这样的:

func handle(conn net.Conn) {
msg := "hello, world!"
for i:= 0; i< 100000; i++ {
go func() {
err := write(conn, msg)
}
}

}
func write(conn net.Conn, msg string) error {
mlen := fmt.Sprintf("%04d", len(msg))

_, err := conn.Write([]byte(mlen + msg))
return err
}

程序会同时运行100000个goroutines,所有goroutines都会向同一个连接发送消息。我怀疑服务器会收到像“helloheloworldworld”这样的错误消息,但是当程序在我的 Ubuntu 14.04LTS 上运行时没有问题。

那么,多个 goroutine 会同时调用一个 Conn 上的方法吗?

============================================= ==========================

如何使 Write 方法保持原子性?

最佳答案

文档指出:

Multiple goroutines may invoke methods on a Conn simultaneously.

没有提到每个单独的写入是否是原子的。虽然当前的实现可以确保每次对 Write 的调用都在下一次调用开始之前完全发生,但语言规范中没有任何保证。

关于multithreading - 多个 goroutine 会同时调用 Conn 上的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37922775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com