取消用户特定的goroutines

我有一个应用程序(网络应用程序),允许用户使用twitter oauth登录并提供自动的tweet删除功能。用户登录到Web应用程序后,我将为每个用户启动一个goroutines(通过REST api),这将删除用户tweet列表。

假设有100位用户,每位用户有500 ++条推文:

  • 如何在删除过程的中间停止删除go例程。

    例如:用户30在启动删除过程2分钟后请求停止删除推文(这应该通过对我的应用程序的API调用来完成)。

  • 考虑到http请求和twitter API限制,创建go例程以使应用程序性能最大化的最佳实践是什么?我应该为每个用户创建go例程还是实现工作者池?

信息:我正在将anaconda用于twitter客户端后端


潇潇雨雨
浏览 238回答 2
2回答

一只甜甜圈

您无法从外部停止goroutine,goroutine必须支持取消操作。有关详细信息,请参阅:在Go中取消阻止操作。支持取消的常见方法是渠道和context套餐。至于哪个对您更好,那太广泛了。这取决于很多事情,但是对于示例/参考,标准库的HTTP服务器在其自己的goroutine中为每个传入的HTTP请求提供服务,并具有不错的性能。如果您的请求率很高,则可能值得创建和使用goroutine池(或使用执行此操作的第三方库/路由器),但这实际上取决于您的实际代码,您应该对应用进行评估/配置,以决定是否它是必需的还是值得的。通常,我们可以说,如果与创建/计划goroutine所需的开销相比,每个goroutine所做的工作都“繁重”,通常只使用一个新的goroutine更为干净。与启动goroutine相比,在goroutine中访问第三方服务(例如Twitter API)可能会增加数量级的工作和延迟,因此,您应该为每个功能启动一个goroutine(不会造成性能损失)。

蛊毒传说

我该如何停止执行例程您可以使用例如已完成的通道启动goroutine,并在已完成的通道关闭后停止您的goroutine。考虑到http请求和twitter API限制,创建go例程以使应用程序性能最大化的最佳实践是什么?这个问题太笼统了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go