为了账号安全,请及时绑定邮箱和手机立即绑定

取消用户特定的goroutines

取消用户特定的goroutines

Go
潇潇雨雨 2021-04-09 15:19:57
我有一个应用程序(网络应用程序),允许用户使用twitter oauth登录并提供自动的tweet删除功能。用户登录到Web应用程序后,我将为每个用户启动一个goroutines(通过REST api),这将删除用户tweet列表。假设有100位用户,每位用户有500 ++条推文:如何在删除过程的中间停止删除go例程。例如:用户30在启动删除过程2分钟后请求停止删除推文(这应该通过对我的应用程序的API调用来完成)。考虑到http请求和twitter API限制,创建go例程以使应用程序性能最大化的最佳实践是什么?我应该为每个用户创建go例程还是实现工作者池?信息:我正在将anaconda用于twitter客户端后端
查看完整描述

2 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

您无法从外部停止goroutine,goroutine必须支持取消操作。有关详细信息,请参阅:在Go中取消阻止操作。支持取消的常见方法是渠道和context套餐。

至于哪个对您更好,那太广泛了。这取决于很多事情,但是对于示例/参考,标准库的HTTP服务器在其自己的goroutine中为每个传入的HTTP请求提供服务,并具有不错的性能。

如果您的请求率很高,则可能值得创建和使用goroutine池(或使用执行此操作的第三方库/路由器),但这实际上取决于您的实际代码,您应该对应用进行评估/配置,以决定是否它是必需的还是值得的。

通常,我们可以说,如果与创建/计划goroutine所需的开销相比,每个goroutine所做的工作都“繁重”,通常只使用一个新的goroutine更为干净。与启动goroutine相比,在goroutine中访问第三方服务(例如Twitter API)可能会增加数量级的工作和延迟,因此,您应该为每个功能启动一个goroutine(不会造成性能损失)。


查看完整回答
反对 回复 2021-04-19
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

我该如何停止执行例程

您可以使用例如已完成的通道启动goroutine,并在已完成的通道关闭后停止您的goroutine。

考虑到http请求和twitter API限制,创建go例程以使应用程序性能最大化的最佳实践是什么?

这个问题太笼统了。


查看完整回答
反对 回复 2021-04-19
  • 2 回答
  • 0 关注
  • 237 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信