源码分析context的超时及关闭实现

前言:

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

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

    该文章后续仍在不断的更新修改中, 请移步到原文地址  http://xiaorui.cc/?p=5604



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

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

context是怎么链式关闭的? 先前分析源码的时候整错了,以为会new一个协程来监听父节点的context的存活。

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

总结:

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

end.


对Golang感兴趣的朋友可以加群: 278517979 !!!
另外如果大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码, 感谢!
另外再次标注博客原地址  xiaorui.cc