V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Mithrandir
V2EX  ›  Go 编程语言

大家在写服务端 go 代码的时候,是喜欢一个请求一个 goroutine 到底,还是喜欢在一个请求处理 goroutine 里再开其他的 goroutine 呢?

  •  
  •   Mithrandir · 2019-12-05 16:36:58 +08:00 · 4174 次点击
    这是一个创建于 1847 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如果是后一种情况,那么一般在什么地方开新的 goroutine 呢?如果能说一下原因最好了。
    simapple
        1
    simapple  
       2019-12-05 17:08:22 +08:00
    在需要等待 io 的地方 最小化 一个 goroutine
    BlackBerry999
        2
    BlackBerry999  
       2019-12-05 17:08:28 +08:00
    要看实际情况,如某些请求对响应时间有要求,但是有部分业务处理耗时较长,此部分会用协程异步处理。
    总结一下:按需处理。
    Mithrandir
        3
    Mithrandir  
    OP
       2019-12-05 17:57:13 +08:00
    @BlackBerry999 @simapple 我理解 goroutine 本来就不会因为自身的在处理 IO 操作而导致其他 gorutine 等待,那么这种情况开新 goroutine 有啥意义呢。
    Mithrandir
        4
    Mithrandir  
    OP
       2019-12-05 17:59:33 +08:00
    如果是非 IO 操作导致该 goroutine 处理时间过长,这种情况新开 goroutine 也没用啊,该占用的 CPU 时间还是要占用。
    yuankui
        5
    yuankui  
       2019-12-05 18:05:24 +08:00
    一杆子,捅到底
    Heebe
        6
    Heebe  
       2019-12-05 18:14:08 +08:00
    我喜欢丰满的,他喜欢瘦的。不过我们都追求一个原则,必须是女的!
    任何模式都是基于业务而设计。
    22too
        7
    22too  
       2019-12-05 18:18:31 +08:00
    基于业务,理论上你都在当前开启了一个 goruntine 了. 那就你认为内部的东西是可以异步的. 具体这个异步里面要不要再写 goruntine ,还是要看你的业务能不能 异步, 如果只能同步操作,就不要开启. 如果能异步那就开启 goruntine.

    如楼上说的, 基于业务
    Mithrandir
        8
    Mithrandir  
    OP
       2019-12-05 18:21:55 +08:00
    @22too 嗯,有道理
    gamexg
        9
    gamexg  
       2019-12-05 18:38:13 +08:00
    一般是一个 goruntine 到底,
    因为虽然 goruntine、chan 成本低,但是也是有成本,没必要多开一个浪费资源。

    但是一些特殊情况下会单独开个 goruntine ,
    例如客户一个连接发出多个请求,其中部分请求类型依赖外部服务并且可能高耗时。
    在客户端可以接受乱序回应的情况下,会使用新 goruntine 处理,根据不用情况,可能考虑提供线程池等方式处理请求。
    index90
        10
    index90  
       2019-12-05 18:56:03 +08:00   ❤️ 1
    给 blog 开发一个接口,根据文章 id,查询文章内容及评论。
    初级后端开发:根据 id 查询文章内容,根据 id 查询评论
    传统后端开发:根据 id 组成 join 查询语句,把查询丢给 db 处理
    现代后端开发:根据 id 同时查询文章内容和评论,组合并返回
    almas1992
        11
    almas1992  
       2019-12-06 16:31:34 +08:00
    @yuankui 绝逼是 PHP 转的 O(∩_∩)O 哈哈~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4207 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 04:09 · PVG 12:09 · LAX 20:09 · JFK 23:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.