编程语言中的 context 是什么?
2024-7-21 08:0:0 Author: jiajunhuang.com(查看原文) 阅读量:17 收藏

最近在看 CSAPP3e,看到讲 context,想起这个概念在学习编程的时候经常遇到,却没有一个准确清晰的定义。随着在工作中逐渐积累, 才有一些感觉。准确的来说,context,就是一堆状态(state)。举几个例子来看不同场景下的 context:

进程/线程切换:进程切换的时候,需要保存当前进程的状态,包括寄存器、内存等,这些状态就是 context。

进程切换

对于进程来说,操作系统把它切换以后,未来的某个时刻还需要切换回来恢复执行,恢复执行所需要的状态,就是进程的上下文。

函数调用:函数调用的时候,需要保存当前函数的状态,包括参数、局部变量、返回地址等,这些状态就是 context。

int add(int a, int b) {
    return a + b;
}

int main() {
    int c = add(1, 2);
    return 0;
}

在调用 add 函数的时候,需要保存当前函数的状态,包括参数 ab,返回地址等,这些状态就是函数的上下文。

Go语言中的 context, 比如GIN框架中的 gin.Context,用来在请求之间传递上下文信息,这个上下文信息就是 context。

func Ping(c *gin.Context) {
    c.JSON(200, gin.H{
        "message": "pong",
    })
}

我们可以把一些状态信息放到 gin.Context 中,然后在对应的请求处理函数中获取这些状态信息,比如当前用户信息,请求参数等。

Python 中的 contextlib 模块:Python 中的 contextlib 模块,用来管理上下文,这个上下文就是 context。

from contextlib import contextmanager

@contextmanager
def tag(name):
    print("<%s>" % name)
    yield
    print("</%s>" % name)

with tag("h1"):
    print("hello")

这个例子中,tag 函数返回一个上下文管理器,with 语句中的代码块会在进入和退出上下文的时候执行,这个上下文就是 context。

因此,我们可以这样理解:context 就是一堆状态(state),在不同的场景下,context 的具体内容和作用是不同的,但是都是用来保存和传递状态信息的。


更多文章
  • deeplink结合路由处理扩展App的能力
  • 怎么使用ViewModel 和 RecyclerView
  • Android手动挡MVVM
  • 来电拦截方案
  • 你好,2021!
  • gRPC鉴权方案
  • Golang里数据库migration方案
  • Android SwipeRefreshLayout左右滑动冲突的解决
  • Android调用gRPC的两个小工具函数
  • Android上结合kotlin使用coroutine
  • gRPC错误处理
  • Java collection的结构
  • 为啥Redis使用pipelining会更快?
  • 通过阳台种菜实现蔬菜自由
  • 从GORM里学习到的panic处理方式



  • 文章来源: https://jiajunhuang.com/articles/2024_07_21-context.md.html
    如有侵权请联系:admin#unsafe.sh