golang的web框架是如何处理高并发场景下的http请求的?

ddxx11223 · 2018-01-01 19:36:02 · 11517 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2018-01-01 19:36:02 的主题,其中的信息可能已经有所发展或是发生改变。


golang来处理http请求,有自带的http包,也有各种框架如gin等,但是很少有资料说明这些包和框架在高并发请求下是如何处理的?

比如java的spring会创建一个线程池和队列来帮助处理大量请求,那golang的http或者gin框架是如何做的呢?创建一个goroutine池?还有其他更细节的说明吗?网上资料好像很少。。。


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

11517 次点击  
加入收藏 微博
8 回复  |  直到 2018-01-04 14:26:01
momaek
momaek · #1 · 7年之前

这些框架基本上都是把自带的 http 包做了一次封装。 处理请求的时候就直接新建一个 goroutine 去处理, 参考这个地方: https://github.com/golang/go/blob/master/src/net/http/server.go#L2732

ddxx11223
ddxx11223 · #2 · 7年之前
momaekmomaek #1 回复

这些框架基本上都是把自带的 http 包做了一次封装。 处理请求的时候就直接新建一个 goroutine 去处理, 参考这个地方: https://github.com/golang/go/blob/master/src/net/http/server.go#L2732

谢谢回答。会不会出现这种情况,短时间内并发请求数暴增,比如达到了千万级,但明显不可能起千万个goroutine,这个时候该怎么办?

jthmath
jthmath · #3 · 7年之前

水平扩展

ddxx11223
ddxx11223 · #4 · 7年之前
jthmathjthmath #3 回复

水平扩展

看来只能堆机器,用负载均衡来解决了

momaek
momaek · #5 · 7年之前
ddxx11223ddxx11223 #4 回复

#3楼 @jthmath 看来只能堆机器,用负载均衡来解决了

这个优化考虑有两个方向 1: 提升单机的性能 (吃力不讨好) 2: 水平扩展

ddxx11223
ddxx11223 · #6 · 7年之前
momaekmomaek #5 回复

#4楼 @ddxx11223 这个优化考虑有两个方向 1: 提升单机的性能 (吃力不讨好) 2: 水平扩展

嗯,谢谢

yinwhm12
yinwhm12 · #7 · 7年之前

什么是水平扩展呀!???

yesuu
yesuu · #8 · 7年之前
yinwhm12yinwhm12 #7 回复

什么是水平扩展呀!???

就是开一堆一样的进程,运行在不同机器上,这需要先有负载均衡机制才能实现。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传