Go语言中文网,致力于每日分享编码知识,欢迎关注我,会有意想不到的收获!

01

前言

Golang的context的作用就不多说了,就是用来管理调用上下文的,控制一个请求的生命周期。golang的context库里有四个组件。 WithCancel用来控制取消事件,WithDeadline和WithTimeout是控制超时,WithValue可以传递一些key value。

func WithCancel(parent Context) (ctx Context, cancel CancelFunc) func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) func WithValue(parent Context, key, val interface{}) Context

下面的结构图就很形象的说明了各个context 的关联关系。context节点通过children map来连接 子context节点。总之,context节点是层层关联的。

02

如何实现超时和链式关闭

上面的功能介绍倒是没什么,让我好奇的是go context是怎么实现的超时和链式关闭。究其原理,还是要分析context的源代码,WithTimeout也是通过WithDeadline来实现的。

func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {return WithDeadline(parent, time.Now().Add(timeout))}

通过下面的WithDeadline方法,我们可以分析出创建一个子context及定时器过程,

context是怎么链式关闭的?

先前分析源码的时候整错了,以为会new一个协程来监听父节点的context的存活。

但想来golang在1.9后内置了context作为标准库, 它不能这么粗暴,现在golang社区里开源库都离不开context方法。为了关闭子节点context,new一个goroutine来监听父节点,这个太不合理。。。想来一定是没有仔细分析代码。。。果然。。。看错了。

总结:

context的源码很简单,代码也精简的,有兴趣的朋友可以细细的琢磨下。

本文作者:rfyiamcool,xiaorui.cc

与context的关系_Go中的Context超时和关闭是如何实现的呢?相关推荐

  1. android context继承关系,android中Context深入详解

    以下分别通过Context认知角度,继承关系,对象创建等方面android中Context做了深入的解释,一起学习下. 1.Context认知. Context译为场景,一个应用程序可以认为是一个工作 ...

  2. 深入理解Golang中的Context包

    context.Context是Go语言中独特的设计,在其他编程语言中我们很少见到类似的概念.context.Context深度支持Golang的高并发. 1. Goroutine和Channel 在 ...

  3. android+单利模式中传递context,Android的Context详解

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Android 是基于Java的,很多时候可以用Java的思想来等同思考,但是却不能和Java进程直接一个Main函数就 ...

  4. 此上下文中不允许函数定义。_深度好文 | 你知道Go中的 context 是怎么实现的吗?...

    Go语言中文网,致力于每日分享编码知识,欢迎关注我,会有意想不到的收获! Go 语言的 context 包短小精悍,非常适合新手学习.不论是它的源码还是实际使用,都值得投入时间去学习. 这篇文章依然想 ...

  5. Android Application中的Context和Activity中的Context的异同

    一.Context是什么: 1.Context是维持Android程序中各组件能够正常工作的一个核心功能类,我们选中Context类 ,按下快捷键F4,右边就会出现一个Context类的继承结构图啦, ...

  6. 与context的关系_Android-Context

    一.简介 Context 翻译为上下文环境,是一个应用程序环境信息的接口. 如果以 Android 系统角度来看可以理解为某一与操作系统的交互的具体场景,比如 Activity 的具体功能,Servi ...

  7. android studio创建一个类继承application_带你全方位了解Android中的Context

    这道题想考察什么? 是否熟悉Context类结构 是否熟悉Application,Activity,Service和Context的依赖关系 Application,Activity,Service中 ...

  8. android context继承关系,Android - 认识Context

    app开发中,我们需要使用app的资源,比如文字.图片,Activity.Service或者broadcastReceiver等等.时常也会用到getApplicationContext()来获取一个 ...

  9. Android 中的context, service,active和intent使用详解

    在一个Android应用中,主要是由四种组件组成的,这四种组件分别是Context,Activity,Intent,Service. Content被译为上下文,是应用程序中心,应用程序所有功能可以通 ...

最新文章

  1. vs下.def文件使用无效问题
  2. python调用系统命令_Python如何调用外部系统命令
  3. python制作手机壁纸_Python爬取手机壁纸图片
  4. 路由跳转的时候地址栏的地址变了 但是页面不变_斐讯路由器如何设置上网 斐讯路由器设置上网方法【图文】...
  5. 关于SpringMVC注解
  6. 【VR】Leap Motion 官网文档 FingerModel (手指模型)
  7. SSDP:DDoS***的“新宠”
  8. 如何清除PCB中负片层的死铜?
  9. 使用思科交换机Packet——Tracer模拟器教程
  10. java开发linux常用命令
  11. PHP连接数据库——身份验证问题
  12. OpenGL中glRotatef()函数究竟对矩阵做了什么
  13. 系列好文(2)——《百岁感言》杨绛
  14. 厂区佩戴安全帽检测算法 yolov5
  15. 解决问题:import torch失败和torch.cuda.is_available()返回false
  16. C/C++ 时间知识总结
  17. MySQL事务实现原理详解
  18. java将分钟转为小时
  19. 概率论与统计学的关系是什么?
  20. 《炬丰科技-半导体工艺》湿法蚀刻工艺对铜及其合金蚀刻剂的评述

热门文章

  1. 艺术签名制作工具v1.0
  2. WIN7下访问ftp的方法
  3. 网页设计-[CSS+DIV设计实例:超酷的竖排导航栏 ]
  4. vue-cli3出现Invalid Host header的解决方案
  5. phpredis报错信息:protocol error, got ‘o‘ as reply type byte解决方案
  6. 算法工程师面试备战笔记2_一个完整机器学习项目的流程
  7. 图卷积神经网络入门详解
  8. 深度学习基础 | 从Language Model到RNN
  9. php常见web安全问题,web安全面试常见问题(来自微博)
  10. python map lambda表达式_Python的lambda表达式、filter、map、reduce等函数的用法