GO:在简单的tcp服务器上超过10000个线程?

时间:2015-10-11 08:30:51

标签: multithreading tcp go

我需要编写一个可以处理超过500k连接的tcp服务器。

我在golang上写了一个简单的服务器,但是当连接超过10k时,服务器崩溃了错误消息"运行时:程序超过10000线程限制致命错误:线程耗尽"。

服务器在最后的linux版本中运行。那可以使用epoll进行tcp连接,使其异步并使用少量fd。那么为什么服务器超出了线程限制?!

我的简单服务器:

Integer.parseInt(strNumber);

更新2015年10月11日
问题是https://github.com/felixge/tcpkeepalive库。请不要使用它:)

1 个答案:

答案 0 :(得分:2)

问题在于https://github.com/felixge/tcpkeepalive库。 这个库获取套接字文件描述符(fd),然后复制并使用新的fd,它以阻塞模式运行。因此,在每个连接上创建新线程。去不要杀死创建的线程(因为这是本机golang行为),并在一段时间后失败“超过10000线程”。而已 ! 请不要使用它:)