golang context 包使用以及 context 包在 kubernetes 中是如何使用的?

使用 context  尽量遵循的规则是

  1. 不要将 Contexts 放入结构体,相反context应该作为第一个参数传入,命名为ctx。 func DoSomething(ctx context.Context,arg Arg)error { // ... use ctx ... }
  2. 即使函数允许,也不要传入nil的 Context。如果不知道用哪种 Context,可以使用context.TODO()
  3. 使用context的Value相关方法只应该用于在程序和接口中传递的和请求相关的元数据,不要用它来传递一些可选的参数
  4. 相同的 Context 可以传递给在不同的goroutine;Context 是并发安全的

context是一个很好的解决多goroutine下通知传递和元数据的Go标准库。由于Go中的goroutine之间没有父子关系,因此也不存在子进程退出后的通知机制。多个goroutine协调工作涉及 通信,同步,通知,退出 四个方面。

具体详情参见  https://github.com/talkgo/night/issues/191

参考资料

https://golang.org/pkg/context/

https://www.flysnow.org/2017/05/12/go-in-action-go-context.html

https://medium.com/@cep21/how-to-correctly-use-context-context-in-go-1-7-8f2c0fafdf39

https://www.flysnow.org/2017/07/29/go-classic-libs-gorilla-context.html

https://mp.weixin.qq.com/s/FJLH4o7Y1TG9I0seiNwR_w

https://draveness.me/golang/docs/part3-runtime/ch06-concurrency/golang-context/

  • 所有的长的、阻塞的操作都需要 Context
  • errgroup 是构架于 Context 之上很好的抽象
  • 当 Request 的结束的时候,Cancel Context
  • Context.Value 应该被用于告知性质的事物,而不是控制性质的事物
  • 约束 Context.Value 的键空间
  • Context 以及 Context.Value 应该是不可变的(immutable),并且应该是线程安全
  • Context 应该随 Request 消亡而消亡

#35 #36 k8s context 实践源码阅读 【 Go 夜读 】相关推荐

  1. 35.FFmpeg学习笔记 - ffplay源码解读3之读文件

    本篇文章看看ffplay是如何读取packet放入队列中的. 一.先看入口函数: int main(int argc, char **argv) {VideoState *is;...av_init_ ...

  2. 基于lis3dh的简易倾角仪c源码_开源网关apisix源码阅读和最佳实践

    大家应该都接手过这种项目,前人找一个开源软件改一改,发上线. 我这里便曾经遇到过类似的问题. 随着需求的增加,各种维护人员东改改西改改,原来的开源项目被改的面目全非,再也无法和上游合并. 甚至TLS协 ...

  3. gin context和官方context_gin 源码阅读(二) 路由和路由组

    " 上一篇讲的是gin 框架的启动原理,今天来讲一下 gin 路由的实现. 1 用法 还是老样子,先从使用方式开始: func main() { r := gin.Default() r.G ...

  4. Flume-NG源码阅读之SourceRunner,及选择器selector和拦截器interceptor的执行

    在AbstractConfigurationProvider类中loadSources方法会将所有的source进行封装成SourceRunner放到了Map<String, SourceRun ...

  5. spring源码阅读(3)-- 容器启动之BeanFactoryPostProcessor

    接着上文<spring源码阅读(2)-- 容器启动之加载BeanDefinition>,当spring加载完所有BeanDefinition时,并不会马上去创建bean,而是先配置bean ...

  6. Flume-NG源码阅读之AvroSink

    org.apache.flume.sink.AvroSink是用来通过网络来传输数据的,可以将event发送到RPC服务器(比如AvroSource),使用AvroSink和AvroSource可以组 ...

  7. r8169驱动源码阅读记录

    r8169驱动源码阅读记录 初始化 发包 收包 源码地址:linux-4.19.90\drivers\net\ethernet\realtek\r8169.c 源码阅读环境:Windows 搭建 op ...

  8. NJ4X源码阅读分析笔记系列(三)—— nj4x-ts深入分析

    NJ4X源码阅读分析笔记系列(三)-- nj4x-ts深入分析 一.系统的工作流程图(模块级) 其工作流程如下(以行情获取为例): 应用端向Application Server发起连接 应用服务器调用 ...

  9. surefire 拉起 junit 单元测试类 源码阅读(一)

    根据surefire 拉起Junit单元测试类 输出的报错日志 跟踪执行过程: 日志1: java.lang.reflect.InvocationTargetExceptionat sun.refle ...

最新文章

  1. Hard Calculation 模拟(200)
  2. C#LeetCode刷题之#561-数组拆分 I(Array Partition I)
  3. Windows域控 设置全域的密码策略 【全域策略生效】
  4. 计算机控制多少度,计算机控制中的模糊调度设计
  5. Swift---TextView用法
  6. 智能优化算法(源码)-飞蛾扑火优化算法(MFO)
  7. 580刷590bios_AMD rx470/480/570/580/590高端技术公版/非公强刷BIOS教程教学-没差老师出品...
  8. EasyRecovery易恢复15免费数据恢复软件功能介绍
  9. spark sample采样
  10. 2020第六届上海市大学生网络安全大赛线上赛Misc-可乐加冰
  11. selenium不定位元素直接操作键盘之Keys.CONTROL
  12. 实变函数与泛函分析知识点整理
  13. C++的STL中accumulate的用法
  14. 2020程序员高质量网站集锦(时间有限,网站贵精不贵多,质量最重要)
  15. 弘辽科技:B站携手阿里入股如涵 UP主里要诞生下一个李佳琦?
  16. 能聊天、会学习,远不是GPT的终局
  17. r语言报错|Error in plot.window(...) : ‘xlim‘值不能是无限的
  18. 琴伤+园游会+迷迭香+美人鱼+上海一九四三+威廉古堡+最后的战役+她的睫毛+麦芽糖
  19. 天润融通牵手葵网新保险电销青睐云呼叫
  20. 迷茫的vbs整人代码,把我整迷了

热门文章

  1. Google翻译问题之——Cloud Translation API has not been used in project x before or it is disabled.
  2. c语言中错误function,c语言中function的使用
  3. 无需端口映射,实现外部网络访问Docker集群内部服务
  4. Centos安装ClamAV并且设置自动更新病毒库
  5. 浙大计算机学院多厉害,一张图,就能告诉你浙大到底有多牛!
  6. 错误与异常 之 try...catch语句
  7. WinCE Eboot中的BLCOMMON
  8. IPT012N08N5 大电流300A 80V MOS管,PDF
  9. google home键_如何使用您的Google Home拨打电话
  10. 微软宣布以700亿美元收购动视暴雪后,股价大跌2.43%