我看net/http中每一个,客户端请求由一个独立的goroutine处理
问题是,这个goroutine数量是否有限制,如何在允许的情况下,最大的增强它的处理并发请求的能力
我看net/http中每一个,客户端请求由一个独立的goroutine处理
问题是,这个goroutine数量是否有限制,如何在允许的情况下,最大的增强它的处理并发请求的能力
7 回答5.3k 阅读
6 回答6.9k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答2k 阅读✓ 已解决
1 回答3.4k 阅读
2 回答2.2k 阅读
1 回答2.1k 阅读
正好,先说说goroutine吧。之前我写goroutine池grpool这个包的时候专门对原生goroutine和grpool进行过性能测试,先发性能测试的结果吧:http://johng.cn/grpool-perfor... 可以看得出来,对性能要求比较高的地方,直接使用原生的goroutine也是比较吃力的,因为其底层没有使用池化设计,在IO复用设计上有进一步的提升空间,原生goroutine在高并发场景下,CPU及内存消耗都比较大。
再说说标准库的http server,以上看得出来标准库的http包也有类似的缺陷。其实已经有老外在github上开源了一个号称比标准库更快的http server,项目地址:https://github.com/valyala/fa...,底层设计也就是增加了goroutine池而已。
golang本身没有对goroutine数量做限制,但是系统对最大文件打开数是有限制的,由于golang在一个系统线程中可能会运行多个goroutine,所以具体限制数量不好评判。建议也不必做过多关心,适合的业务场景中充分使用goroutine池是提高性能及增强并发处理能力的最好选择。