ada*_*jun -2 networking multithreading go goroutine
我的程序是这样的:
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
}
Run Code Online (Sandbox Code Playgroud)
程序会同时运行100000个goroutine,所有的goroutine都会向同一个连接发送消息?我怀疑服务器会收到“hellohelloworldworld”之类的错误消息,但是在我的 Ubuntu 14.04LTS 中运行程序时没有问题。
那么,多个 goroutine 会同时调用 Conn 上的一个方法吗?
================================================== ========================
我怎样才能保持Write方法的原子性?
该文件指出:
多个 goroutine 可以同时调用 Conn 上的方法。
没有提到每个单独的写入是否是原子的。虽然当前的实现可以确保每次调用都Write在下一次调用开始之前完全发生,但语言规范中没有保证。
| 归档时间: |
|
| 查看次数: |
270 次 |
| 最近记录: |