java系统找不到指定文件怎么解决
268
2022-09-20
Go 并发 : Context
翻译自:Go Concurrency Patterns: Context地址:server端,每个请求都是通过新起goroutine来处理。请求处理程序通常会启动其他goroutine来访问后端,例如数据库和RPC服务。处理该请求的goroutine集合通常需要访问特定于请求的值,例如最终用户的身份,授权令牌和请求的时限。当一个请求被取消或超时时,处理该请求的所有goroutine应该迅速退出,以便系统可以回收他们正在使用的资源。
在Google,我们开发了一个Context包,可以轻松地跨API边界将请求范围(request-scoped)的值,取消信号和截止日期(deadlines)传递给处理请求的所有goroutine。该软件包可作为Context公开使用。本文将介绍如何使用该package。
Context
Context包的核心是Context类型:
更详细的介绍,参见godoc:channel只用于接收的原因,Context没有取消方法:接收取消信号的方法与发送信号方法往往不是同一个。特别是,当父操作(parent operation)为子操作(sub-operations)启动goroutines时,这些子操作应该不能取消父操作。相反,WithCancel函数(如下所述)提供了一种取消新的上下文值的方法。
Context是协程安全的。代码中可以将单个Context传递给任意数量的goroutine,并在取消该Context时可以将信号传递给所有的goroutine。
最后期限(Deadline)方法允许函数决定他们是否应该开始工作;如果剩下的时间太少,可能就不值得了。代码也可以使用期限(Deadline)来设置I/O操作的超时。
值(Value)允许Context携带请求范围(request-scoped)的数据。该数据必须是协程安全的,以便多个goroutine可以同时使用。
Derived contexts
Context包提供了从现有Context值派生新Context值的函数。这些值形成一个树:当一个Context被取消时,从它派生的所有Context也被取消。
Background是所有Context树的根;它永远不会被取消:
WithCancel和WithTimeout返回派生的Context值,该值可以比父Context早被取消。请求处理程序返回时,通常会取消与传入请求关联的Context。使用多个副本时,WithCancel对于取消冗余请求也很有用。WithTimeout对于设置对后端服务器的请求的最后期限很有用:
WithValue提供了一种将请求范围的值与Context关联的方法:
< END >
喜欢就点个or 转发个朋友圈呗
衣舞晨风
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~