看代码经常能看到一些变量命名 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,写出的代码难以理解。代码还是应该自注释。

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

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

到底什么是上下文(Context)相关推荐

  1. golang 上下文 Context

    上下文 context.Context Go 语言中用来设置截止日期.同步信号,传递请求相关值的结构体.上下文与 Goroutine 有比较密切的关系,是 Go 语言中独特的设计,在其他编程语言中我们 ...

  2. .Net上下文Context  学习记录

    1.上下文的概念 应用程序域是进程中承载程序集的逻辑分区,在应用程序域当中,存在更细粒度的用于承载.NET对象的实体,那就.NET上下文Context. 所有的.NET对象都存在于上下文当中,每个Ap ...

  3. Koa v2.x 中文文档 上下文(Context)

    上下文(Context) 此系列文章的应用示例已发布于 GitHub: koa-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star. Koa Context 将 ...

  4. web前端高级React - React从入门到进阶之组件的懒加载及上下文Context

    第二部分:React进阶 系列文章目录 第一章:React从入门到进阶之初识React 第一章:React从入门到进阶之JSX简介 第三章:React从入门到进阶之元素渲染 第四章:React从入门到 ...

  5. Android上下文Context

    Android 上下文Context 源码基于Android8.0 API 26 1 Context的关联类 在Android中,Activity可以直接new吗? Activity mActivit ...

  6. React上下文-Context

    导语 redux解决的核心问题是父子兄弟等组件件传值很麻烦的问题,于是有了一个"通讯班"--redux,这个通讯班可以帮我们把组件之间的状态整合到一起,然后修改也统一修改.我们觉得 ...

  7. 【Go 并发控制】上下文 context 源码

    Context 在 Go 服务中,往往由一个独立的 goroutine 去处理一次请求,但在这个 goroutine 中,可能会开启别的 goroutine 去执行一些具体的事务,如数据库,RPC 等 ...

  8. Spring应用上下文 - - context

    Spring上下文是一个抽象的概念. 简单点理解,就是将需要Spring IoC容器帮我们管理的对象(Spring中我们称对象为bean),bean 与 bean之间的协作关系,基于xml 或 Jav ...

  9. 计算机中的“句柄”(handles)是什么意思?(就是内存地址)Intel Realsense中的frame_handle是什么?(什么是上下文context以及句柄handle?)

    可以将frame_handle视为封装一个实际帧对象的智能指针. 这种抽象非常有用,例如对于同一帧的并发处理. 参考文章1:计算机中的"句柄"是什么意思? 参考文章2:What's ...

最新文章

  1. Access数据库操作软件研究
  2. 为什么要用Dubbo-远程通信背景
  3. VSCode 汉化、设置为 中文语言显示 、中文界面
  4. 杭州招聘计算机专业毕业生,毕业季必看!杭州高校毕业生就业情况:这些专业最吃香!这个岗位最缺人!...
  5. swagger默认访问路径_swagger 如何配置项目访问路径
  6. 去掉input、textarea 的边框
  7. 细谈最近上线的Vue2.0项目(一)
  8. 程序员面试金典——5.3最接近的数
  9. 美赛整理之理想直流伺服电机的simulink仿真优化
  10. tbb::parallel_for 实例
  11. OA审批工作流设计器实现
  12. a标签下载pdf文件
  13. 2.12 Excel软件各工作区的显示和隐藏 [原创Excel教程]
  14. 数据库显示备份服务器失败,数据库备份
  15. java编程删除文本框_Java获取和删除Word文本框中的表格
  16. SAP abap采购报表开发
  17. chrome下载速度慢,手把手教学
  18. MySql 笔记(五)InnoDB引擎页分裂与页合并的原理
  19. python爬虫——爬取拉勾上的职位信息
  20. TKE用户故事 | 作业帮检索服务基于Fluid的计算存储分离实践

热门文章

  1. docker-compose安装kafka
  2. kindle如何设置不闪屏_kindle闪屏怎么解决
  3. 基于java斗地主_码云推荐开源项目丨 用 Java 写了一个控制台玩的斗地主
  4. CCTV主持人博客列表
  5. 不懂不要炒股,一定要在调整时买入股票!
  6. 运行django代码报错ModuleNotFoundError: No module named 'myapp'如何解决
  7. 售后服务场景智能调度解决方案
  8. html5页面 学生作品,最完整长页面H5制作教程来啦!
  9. RT-Thread学习笔记——互斥量
  10. python简笔画程序_社会了,教小白如何用Python画出小猪佩琪!