上下文是个啥?如何用好上下文?Context
上下文是上文和下文,意思是环境,函数从环境中获取相关数据。环境也是参数的一种,它和其他参数的差别可能是由客户提供,或者由系统提供,如客户提供1,2,3,并从系统中获取窗口句柄作为上下文,一起传递给函数,这个函数就在该窗口输出统计值。
业务逻辑处理——上下文
当我们通过上下文进行业务处理时
就比如我们推荐商品,会根据用户的标签、关键词类别、搜索记录、购买记录、浏览记录、输入法输入记录、其他平台的搜索记录等等,来进行!
这些都是环境中相关数据,程序需要获取这些上下文,来计算出结果!
这个业务逻辑需要的上下文,可以封装为一个类,通过面向对象的方法,来方便程序处理
同时,当业务逻辑足够复杂时,这个类可以进一步升级为【微服务】
其他人的经验之谈
总之一句话:上下文是个好东西。
我做的各种复杂编辑器系统,都会有一个叫做上下文的东西,来总揽所有状态和操作。无论链路多深、流程多长,都可以随时随地的访问上下文,进行任何想要的进行的操作。
中断处理之前保存上下文——硬件通过触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。所谓的“中断上下文”,其实也可以看作就是硬件传递过来的这些参数和内核需要保存的一些其他环境(主要是当前被打断执行的进程环境)。中断时,内核不代表任何进程运行,它一般只访问系统空间,而不会访问进程空间,内核在中断上下文中执行时一般不会阻塞。
上下文总结
大部分的业务开发花最多时间的就是在编写代码去收集这些上下文,但往往最不上心的就是好好组织和管理这些上下文。
复杂业务的上下文收集起来成本高昂,但很多人却会忽视他们的重要性,不好好写清楚注释和文档,提高他们的复用性。着实可惜。
什么是句柄(handle)
以我常接触的例子来说,handle就是某种东西的控制器
操作系统操作资源的一个把手。
不同于指针直接指向固定的物理地址,由于操作系统对内存资源的分配是动态的,不能保证固定物理地址下的资源不变,因此就有了句柄,将物理地址隐藏起来,只关注对象本身。操作系统中,打开的窗口、打开的文件等对象都会分配得到一个句柄,要操作对象,就需要通过这个句柄来操作。
相当于假设你问操作系统要一辆车,操作系统告诉你一串数字,说你想要车的时候拿这串数字跟我要,用这串数字就可以使用车的各种功能,这串数字就是句柄
进一步简化,直接可以简单粗暴理解为面相对象里面的实例,一个类似 new 出来的特殊对象
DLL(Dynamic Link Library)文件为动态链接库文件
windows会自动(强制性)将dll注入目标进程地址空间,所以这时dll等于是目标进程的一部分了。
DLL就是一个类文件,需要被其他文件实例化才能实行,因为它本身并没有入口方法
所以动不动就提示缺少dll文件,安装时就不能带上吗
带上就太大了,而且有些动态链接库是不能随便打包进自己程序里的,不然被发现了是要吃律师函的
早年用游民和三大妈的时候经常需要各种各样的dll,后来用上了steam才知道这玩意是真的便捷,怪不得steam能率先发展起来,精准找到用户痛点。
钩子技术
总结:对事件的全局监控
Hook是Windows中提供的一种用以替换DOS下“中断”的系统机制,中文译为“挂钩”或“钩子”。在对特定的系统事件进行hook后,一旦发生已hook事件,对该事件进行hook的程序就会收到系统的通知,这时程序就能在第一时间对该事件做出响应。
回调函数
回调函数 “回头再调用函数”,你把你的函数指针通过参数的形式传递给某个函数,该函数再它自身调用之后调用你传递的函数。
为了更好的代码复用和简化逻辑处理。但是回调函数这个名字不太好理解
回不回调 不重要。核心目的是要把函数当做变量使用。
底层语言 传 函数地址,高级语言 传 代码块。本质也是函数地址。
socket(套接字)
socket的中文翻译是套接字,个人觉的这个翻译真的是太差劲了,套接字听起来毫无意义,所以很多人在第一次听到socket这个词的时候肯定很迷茫。
其实,socket就是一个插座,让两个应用建立连接,用于数据传输
0_3.jpegsocket就是一套api connect方法就是封装了三次握手send方法只需要传数据 不关心报文格式的封装 就是屏蔽了底层的实现
网友评论