golang
发布时间:2020-12-16 19:14:10 所属栏目:大数据 来源:网络整理
导读:如果tcp.cond在2个go程里面同时read数据,会发生什么情况? package mainimport( "net" "fmt")func main(){ l,_ := net.Listen("tcp",":8888") for { conn,_ := l.Accept() go func(c net.Conn) { for{ b := make([]byte,128) n,err := c.Read(b) if err !=
如果tcp.cond在2个go程里面同时read数据,会发生什么情况? package main import( "net" "fmt" ) func main(){ l,_ := net.Listen("tcp",":8888") for { conn,_ := l.Accept() go func(c net.Conn) { for{ b := make([]byte,128) n,err := c.Read(b) if err != nil{ break } fmt.Println("caaaaaaaaaaaaaaaaaaaaa",string(b),n,err) } }(conn) go func(c net.Conn) { for{ b := make([]byte,err := c.Read(b) if err != nil{ break } fmt.Println("ccccccc",err) } }(conn) } } 结论是:只有一个go程会被唤醒。 猜想到的,因为go是多线程,所以每个线程里面有一个epoll。故每个线程里面的epoll可能都会监听了该fd的事件。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |