求助 golang 并发发起 tcp连接 accept卡住

测试用例代码如下
并发发起2000个连接会出现 accept卡死的情况
只有drawin和linux系统会有这个问题,windows正常

func TestStressConn3(t *testing.T) {
	const max = 2000
	var number = 0
	l, _ := net.Listen("tcp4", "127.0.0.1:9003")
	wg := sync.WaitGroup{}
	wg.Add(max)

	for i := 0; i < max; i++ {
		go func() {
			t.Log("start conn")
			net.Dial("tcp4", "127.0.0.1:9003")
			t.Log("end conn")
		}()
	}
	go func() {
		for {
			number++
			fmt.Println("accept", time.Now().String())
			l.Accept()
			fmt.Println("end", time.Now().String(), number)
			wg.Done()
		}
	}()
	tm := time.Now()
	wg.Wait()
	t.Log("用时", time.Now().Sub(tm).Seconds())
}

共 1 个回复


a7a2

把fmt,t.Log都去掉就可以了,在for这个级别面前任何输出都是拖后腿的。谢康生吧!

# 0