Go并发之Context篇

本文探讨Go语言中的Context,解释为何Go需要Context,它的作用以及如何使用。Context用于管理协程之间的关系,解决复杂并发场景下的协程控制问题。文章介绍了Context的定义、接口、API以及使用步骤,并通过示例说明如何创建和取消Context,同时解析了Context的实现机制,包括数据存储、查询和取消功能。
摘要由CSDN通过智能技术生成

Go并发之Context篇

 

前言介绍:在学习Go并发的时候,我们总是能够看到context,而这个context却只在go语言中存在。笔者在看到context的时候,便问了自己几个问题。

context是什么?是用来干什么的?我们为什么需要context? context是如何使用的?它为什么被设计成这个样子?

基于上面的这些问题,笔者做了整理,笔者觉得在知道了这些问题的答案之后,context 也算是有一点了解了。

1. 为什么Go需要context,它是用来干什么的?

原因:在golang中的创建一个新的协程并不会返回像c语言创建一个线程一样类似的pid,这样就导致我们不能从外部杀死某个线程,所以我们就得让它自己结束。(备注:goroutine不能返回pid的原因,应该是协程的实现原理有很大关系,多个协程对应1个线程的实现机制。)

当然我们可以采用channel+select的方式,来解决这个问题,不过场景很复杂的时候,我们就需要花费很大的精力去维护channel与这些协程之间的关系,这就导致了我们的并发代码变得很难维护和管理。例如:由一个请求衍生出多个协程,并且之间需要满足一定的约束关系,以实现一些诸如:有效期,中止线程树,传递请求全局变量之类的功能。

Context机制:context的产生,正是因为协程的管理问题,golang官方从1.7之后引入了context,用来专门管理协程之间的关系。

Google的解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值