到底什么是上下文(Context) 您所在的位置:网站首页 什么叫做属性 到底什么是上下文(Context)

到底什么是上下文(Context)

2024-07-16 21:10| 来源: 网络整理| 查看: 265

       看代码经常能看到一些变量命名 XXXcontext  XXXctx,或者一些博客中也总提到一个名词:上下文(context)。一直非常疑惑,到底什么叫上下文。也没太好意思问人,感觉就是很简单的概念。自己google下,发现也确实有很多人有同样的疑惑。

                                                 

       从字面理解,上下文——就是上下的文意。语文中经常提到的一个名词。根据上下文来理解某个词,某段等等。但是具体到代码中,到底什么才是上下文呢?

       先看看别人怎么解释上下文的:

               

       解读一:这a,b不就是我们常说的参数嘛,怎么这儿又叫上下文了呢。难道外部变量就是上下文嘛?

                 

       解读二:其实这个说的挺好的。只是明明说感性理解,具体到代码里,又有这么多真正的实现。感觉有点点近似佛学了。你悟了,也就知道了。不悟的时候,就有一种知道是什么,又不知道是什么的感觉。

                    

       解读三:这……

  

       从维基百科上的解释,应该能说明context一词的由来。上下文是针对中断来体现其具体含义的,在内核设计者的眼中,当一个任务在中断时,CPU会去执行中断对应的任务。中断结束后,再执行之前的task时,原有任务的相关数据(在处理原任务所需要的数据)需要保存下来,否则无法继续执行原有任务。如果把相关数据记录到一个变量里。那这个变量就可以称为原task的上下文了。作为一个菜鸟,如果我自己写这个变量的命名。我宁愿叫priTaskInfo,感觉对一个新手来说,infomation一词更能直观的表达这种场景对应的概念。但好像info太low了,而且info一词含义有点模糊,所有的相关数据都可以叫info,概念太宽泛。所以刚开始写类名的时候,用的最多的就是info,反观高手的代码用info的不多。

       通俗的理解,上下文,也就是执行任务所需要的相关信息。这个任务可以是一段代码,一个线程,一个进程,一个函数。当这个“任务”,相关信息需要保存下来,就可以使用Context来记录了。

       一旦真正理解了上下文的概念,就像解读三描述的一样,只要想有个object来保存相关信息,就可以叫context了。这个看似高大上的名字,真的会给不理解context一词的人,造成一种距离感,难以直观的理解代码表述的含义,还以为有什么高深的用法。        如果不关心内核里上下文的概念(看内核代码的人,上下文这个词,理解的应该很透彻了),在C++代码里,有些地方用context一词还是比较合理的。比如回调函数,当回调函数是带参数的时候,如pCaller.SetCallBack(pFuncCallBack, m_FuncContext); 这个m_FuncContext上下文,还是比较能清晰的表达出本身的含义的。当这个回调函数被调用的时候,需要这些参数。这些参数就是这个回调函数的上下文。再比如多线程中,如果多线程某个线程都做同一件事,类似每个线程都打印hello world,似乎也不需要上下文的概念。如果每个线程都处理一个消息,一般这个参数会被设置为pHandleMsg。如果各个线程在处理任务时,需要根据线程的调用者来设置调用者相关的信息。那这个时候使用context来记录相关信息也感觉无比自然。

       看到这儿应该对上下文有个更清晰的理解了吧。再反过来看上面各个解释,似乎说的都对。一旦理解这个词以后,滥用这个概念,想不出好名字,就用context来命名,还是挺让人难受的。所以如果仅仅是是一些简单的数据,建议还是按照含义来命名,不要处处都使用context,写出的代码难以理解。代码还是应该自注释。

       想到这儿不得不感叹一句,本来一个简单的概念含义本身是清晰的,一万人看完以后,又给出一万个解释,每个人的解释又不能说是错的。然后新人又不得不把这一万个解释理解了,归纳成自己的理解。

        什么是上下文,可惜书里从没记载,终于摸出来但岁月却不回来。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有