我的程序是这样的:
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 个 goroutine,并且所有 goroutine 将向同一个连接发送消息。我怀疑服务器会收到类似“hellohelloworldworld”的错误消息,但是当程序在我的 Ubuntu 14.04LTS 中运行时没有问题。
那么,多个 goroutine 会同时调用 Conn 上的方法吗?
=========================================================================
我怎样才能保持Write方法的原子性?
PIPIONE
ABOUTYOU
相关分类