关于golang http server的疑问

我看net/http中每一个,客户端请求由一个独立的goroutine处理

问题是,这个goroutine数量是否有限制,如何在允许的情况下,最大的增强它的处理并发请求的能力

阅读 4.1k
1 个回答

正好,先说说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池是提高性能及增强并发处理能力的最好选择。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题