不怎么适合把这样的文章放在这个上下文环境中,周围写的东西和我这种不是一个偏向。写出来是分享给同样探索在某一个路段的人,可能会有人懂吧,这样相互传递声音就觉得 得到了某些交互和证实。
先说对编程的模糊印象,大体通过某些印象总结出一个球管模型。软件分为计算、运输、缓存和存储。把计算的功能集合看成一个球,球体之间的运输便是管道。这个球和管道连接的模型被放在缓存中。数据是死的放在某些管道的终点。
有“动量”的内容才会被放到缓存,数据就像死的墙壁放在一边。球体内部除了计算部分,还有对数据临时存放的占位,有很多数据访问这个球体,这个球体便是大的。球体和球体之间通过粗细不同的管道连接,管道的宽度取决于传输数据的大小;管道的长度取决于两个球体之间的距离,既两个逻辑块的关联距离。
Java中的球体大概就是类或类的方法,管道可以理解为某些连接,像数据库连接、web客户连接,却又不仅如此。Java用到方法的时候,说是把方法框架压入到栈,临时变量存储在方法框架里,执行完直接弹掉方法框架。
假如按照直接去本方法体内去执行代码,这一段代码就像是一个小球,引去执行的过程就是一个管道。每次访问这个方法便是访问这个球体,这个球体同一时间可以容纳多个访问。球体本身内部是各种通道,每个数据过来根据数据的不同走向不同的通道,这段通道或者处理过程是可以重复利用的,不同的只是每次传递的参数。假如每个客户是线程独立的,共同访问这一段代码,却有自己的数据栈,于是执行结果相互不会影响,除非在代码段本身或者说球体中,存放着大生命周期的变量。这样球体是不动的,组成这个球体的逻辑代码集合不动,每个需要用到球体处理的客户线程过来访问这个球体,访问一圈后就从球体中出去,被指引向另一个球体。单位时间内球体吞进的客户数量便是迸发量,需要吞进的越多可以代表球体越大。
也就是说考量一个程序的内存占用量,可以考虑它每个功能每次被线程调用需要多少内存,会有多少个线程同时访问那个功能。预估每个功能的负载量和相应的内存消耗,再把所有功能用量加在一起,就是整个进程的内存消耗。
各种功能的代码段放进各种方法中,类作为功能的集合囊括着这些方法。如果需要用到的方法距离现在的类太远,就要到更远的地方去访问。逻辑分类处理得好的话,这个距离不会很远;处理得不好的话,这个距离可能是加载缓存页。就像空间中的球,有的管道连接得太远,说明整体设计得不好。一些重复使用的依赖,就近重新建立一个球体比较好,而不是去导入偏远的包。
线程找到相关代码并跳转执行,处理客户数据。如果把代码看成静止的、没有被移动的,也可以当做是线程客户带着数据主动上前去找到并访问了那一段代码。其中涉及到一个移动的过程,在缓存、内存条上移动指针,到相关代码段位置开始执行。既每个代码逻辑之间都是有实际距离的,在空间上可以看成是“球体”排布在特定的位置。连接到这个特定的位置就要有相关长度的管道。
每个逻辑块都是一个球体。每个请求过来从各个球体和连接球体的管道之间穿梭,走向数据保存既撞向墙壁,走向对外传输通道把相关数据输出出去。球体和管道占用的是计算量和缓存量,其中包括的动能就是计算量,占用的空间,个体空间和相互连接排布产生的缝隙空间,就是缓存量。
很多语言都可以理解为球管模型,球管模型的构建方式由实际业务决定。