编程中的上下文(Context)

发布于2025-03-25

在很多语言和框架中,比如Golang,比如Dard的Fultter框架,都会涉及到一个重要的术语,叫做Context,中文一般叫做上下文,可能由于中文语境的不同,有点容易让人难以理解。

上下文本身是一个语言学科的术语

语境是语言学科(语言学、社会语言学、篇章分析、语用学、符号学等)的概念。 语境概念最早由人类学家马林诺夫斯基所提出,分为情景语境和文化语境。也可以区分成语言性语境和社会性语境。 语境(语言的文化背景、情绪景象、时空环境等)的介入,一方面使多义的语言符号趋向单义,另一方面又使语言符号节外生枝,增生出语境意义。语境意义甚至可以掩盖语言符号自身具有的意义而成为交际的主信息。语境也控制着交际者对语言符号的选用。我们这里所谓的语境意义,是指在语境中,语言符号实际具有的涵义,包括赋予义和解释义

计算机术语中的上下文其实是对这个概念的一个衍生,即

在计算机科学中,任务(task)的上下文(英语:context)是一个任务所必不可少的一组数据(该任务可以是进程、线程)。这些数据允许任务中断,在这之后仍可在同一个地方继续执行。上下文的这一概念在中断的任务的场景下具有重大意义,其中,任务在被中断之后,处理器保存上下文并提供中断处理(interrupt service routine)。因此,上下文越小,延迟越小。

怎么说呢,这本身是通过术语来解释术语,直接理解的门槛不小。

在语文的学习中,我们一般都学过阅读理解。同样的词语和句子,要放在上下文,也就是整体的文字背景中进行理解,才能体会出正确的含义。上下文本身也是要理解的词语/句子的必不可少的一部分。

计算机术语里的上下文大体就是借用了这个含义。

根据我们的实务理解,我们不妨借用一个新的概念来理解上下文含义。

我们可以把引入上下文概念的代码,当成一起对案件的处理。

在案件的处理中,会有三个概念,

  • 案件
  • 现场
  • 警员

我们的代码,一般是用来对不同场景的请求进行处理,代码在这个场合下,就是一个 警员的身份。同一个警员,案件不同,现场不同,处理方式和结果会有不同。

案件也是一个很重要的概念。绝大部分使用上下文的场景,都是对不同的请求进行处理。每一个请求我们都可以认为是不同的案件。请求之间一般会各自独立,也就是案件之间往往没有相关性,所以大部分信息不能放在一个全局的固定的空间之中。

最后说到现场了。现场就是案件发生时的一切相关的状态,可能包括时间,地点,当事人,场所,旁观者等等和案件相关的信息。每一个案件的处理,都是警员(程序)根据现场的情况,从现场获取必要的信息和判断后,作出相应的处理,周而复始,同一批警员(程序),不停的面对不同的案件,分析不同的现场。现场随案件而生,伴案件结束而失效。

以此为例,编程语言中的上下文的概念,就是处理每一个请求时相应的现场。从这个角度理解,可能比文学概念上的上下文更容易和贴切一些。