#35 #36 k8s context 实践源码阅读 【 Go 夜读 】
golang context 包使用以及 context 包在 kubernetes 中是如何使用的?
使用 context 尽量遵循的规则是
- 不要将 Contexts 放入结构体,相反
context
应该作为第一个参数传入,命名为ctx
。func DoSomething(ctx context.Context,arg Arg)error { // ... use ctx ... }
- 即使函数允许,也不要传入
nil
的 Context。如果不知道用哪种 Context,可以使用context.TODO()
。 - 使用context的Value相关方法只应该用于在程序和接口中传递的和请求相关的元数据,不要用它来传递一些可选的参数
- 相同的 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 夜读 】相关推荐
- 35.FFmpeg学习笔记 - ffplay源码解读3之读文件
本篇文章看看ffplay是如何读取packet放入队列中的. 一.先看入口函数: int main(int argc, char **argv) {VideoState *is;...av_init_ ...
- 基于lis3dh的简易倾角仪c源码_开源网关apisix源码阅读和最佳实践
大家应该都接手过这种项目,前人找一个开源软件改一改,发上线. 我这里便曾经遇到过类似的问题. 随着需求的增加,各种维护人员东改改西改改,原来的开源项目被改的面目全非,再也无法和上游合并. 甚至TLS协 ...
- gin context和官方context_gin 源码阅读(二) 路由和路由组
" 上一篇讲的是gin 框架的启动原理,今天来讲一下 gin 路由的实现. 1 用法 还是老样子,先从使用方式开始: func main() { r := gin.Default() r.G ...
- Flume-NG源码阅读之SourceRunner,及选择器selector和拦截器interceptor的执行
在AbstractConfigurationProvider类中loadSources方法会将所有的source进行封装成SourceRunner放到了Map<String, SourceRun ...
- spring源码阅读(3)-- 容器启动之BeanFactoryPostProcessor
接着上文<spring源码阅读(2)-- 容器启动之加载BeanDefinition>,当spring加载完所有BeanDefinition时,并不会马上去创建bean,而是先配置bean ...
- Flume-NG源码阅读之AvroSink
org.apache.flume.sink.AvroSink是用来通过网络来传输数据的,可以将event发送到RPC服务器(比如AvroSource),使用AvroSink和AvroSource可以组 ...
- r8169驱动源码阅读记录
r8169驱动源码阅读记录 初始化 发包 收包 源码地址:linux-4.19.90\drivers\net\ethernet\realtek\r8169.c 源码阅读环境:Windows 搭建 op ...
- NJ4X源码阅读分析笔记系列(三)—— nj4x-ts深入分析
NJ4X源码阅读分析笔记系列(三)-- nj4x-ts深入分析 一.系统的工作流程图(模块级) 其工作流程如下(以行情获取为例): 应用端向Application Server发起连接 应用服务器调用 ...
- surefire 拉起 junit 单元测试类 源码阅读(一)
根据surefire 拉起Junit单元测试类 输出的报错日志 跟踪执行过程: 日志1: java.lang.reflect.InvocationTargetExceptionat sun.refle ...
最新文章
- Hard Calculation 模拟(200)
- C#LeetCode刷题之#561-数组拆分 I(Array Partition I)
- Windows域控 设置全域的密码策略 【全域策略生效】
- 计算机控制多少度,计算机控制中的模糊调度设计
- Swift---TextView用法
- 智能优化算法(源码)-飞蛾扑火优化算法(MFO)
- 580刷590bios_AMD rx470/480/570/580/590高端技术公版/非公强刷BIOS教程教学-没差老师出品...
- EasyRecovery易恢复15免费数据恢复软件功能介绍
- spark sample采样
- 2020第六届上海市大学生网络安全大赛线上赛Misc-可乐加冰
- selenium不定位元素直接操作键盘之Keys.CONTROL
- 实变函数与泛函分析知识点整理
- C++的STL中accumulate的用法
- 2020程序员高质量网站集锦(时间有限,网站贵精不贵多,质量最重要)
- 弘辽科技:B站携手阿里入股如涵 UP主里要诞生下一个李佳琦?
- 能聊天、会学习,远不是GPT的终局
- r语言报错|Error in plot.window(...) : ‘xlim‘值不能是无限的
- 琴伤+园游会+迷迭香+美人鱼+上海一九四三+威廉古堡+最后的战役+她的睫毛+麦芽糖
- 天润融通牵手葵网新保险电销青睐云呼叫
- 迷茫的vbs整人代码,把我整迷了
热门文章
- Google翻译问题之——Cloud Translation API has not been used in project x before or it is disabled.
- c语言中错误function,c语言中function的使用
- 无需端口映射,实现外部网络访问Docker集群内部服务
- Centos安装ClamAV并且设置自动更新病毒库
- 浙大计算机学院多厉害,一张图,就能告诉你浙大到底有多牛!
- 错误与异常 之 try...catch语句
- WinCE Eboot中的BLCOMMON
- IPT012N08N5 大电流300A 80V MOS管,PDF
- google home键_如何使用您的Google Home拨打电话
- 微软宣布以700亿美元收购动视暴雪后,股价大跌2.43%