是否应该在 http 请求 goroutine 之外处理所有独立任务?

Posted

技术标签:

【中文标题】是否应该在 http 请求 goroutine 之外处理所有独立任务?【英文标题】:Should all independent tasks be processed outside the http request goroutine? 【发布时间】:2015-06-24 16:06:49 【问题描述】:

由于 golang 在单独的 goroutine 中处理传入的请求,我不清楚哪些类型的任务应该推迟到消息队列处理,例如NSQ 消费者,应该在 http 请求 goroutine 中处理。

【问题讨论】:

请改写为具体问题 @krait 问题改写 【参考方案1】:

由于net/http 包运行每个请求,您无需担心阻塞请求goroutine。您应该问自己的真正问题是“我是否需要在向客户返回响应之前执行此操作,还是可以推迟到以后”。一般来说,如果我需要从数据库中获取一个响应,这个响应会阻塞请求 goroutine,那没关系。如果我现在可以返回响应并将消息放入队列中以供稍后处理,那也可以。

由于 request goroutine 的存在成本很小,而且它与其他请求是隔离的,所以你真的不需要太担心它。做对客户有意义的事情。

【讨论】:

以上是关于是否应该在 http 请求 goroutine 之外处理所有独立任务?的主要内容,如果未能解决你的问题,请参考以下文章

golang之context详解

golang 之 context包

Go标准库Context

Go语言Context(设计及分析)

聊聊golang的context

Golang Context 包详解