如何正确停止rpc service?

来源:10-13 编码实战: 改造文件上传service

拧壶冲

2020-10-26

我有注意到启动rpc的service是使用goroutine启动的,按照go的文档中说的,正确停止goroutine十分必要,不然会出现服务器的资源无法正确释放。这是不是也是因为在api的service里面有传 context.TODO?但是我们是在main里面启动的,如果是用context来停止goroutine,是不是应该使用context.background?

写回答

1回答

xiaomo

2020-10-29

同学你好,如果资源资源没有合理释放,类似与内存泄漏,可用的资源越来越少,可能会导致系统服务不可用或崩溃。至于context.background,这个作为context的根对象,是不能被取消的呢;如果想要根据context来中止操作,应该用继承于context.background的对象来实现,比如:

rootContext := context.Background()
ctx, cancelFunc := context.WithCancel(rootContext)
go sumFunc(ctx, cancelFunc)


0
0

Go实战仿百度云盘-实现企业级分布式云存储系统

紧随“云时代”技术潮流,分布式云存储系统,做第一代云程序员

1077 学习 · 494 问题

查看课程