程序原本(九十一):系统的基础部件——依赖(状态:含义与可操作性完全明确的数据(值))

阅读数:22 2019 年 10 月 5 日 13:42

程序原本(九十一):系统的基础部件——依赖(状态:含义与可操作性完全明确的数据(值))

xx 这个集合中的 Sx 只是数据,而并不应当包括 Sx 的操作。这是考虑到 Sx 本身不能再有任何的依赖——包括时间,因此它必须是一个含义与可操作性都非常明确的状态值。若使 Sx 与其操作都存在于同一个集合中,则它们必须只能是一个可分布系统的“数据全集 x2”一部分,并且该系统的数据集 x2 中也就存在相对应的 Sx2

作出这一点限制才可以使 x 作为一个独立概念加以考察,并且可以将“数据”与“数据的状态”在概念上有效地区分开来。由于任何状态

  • 本身也是数据
  • 也能被作为数据 x2 复合到一个“数据全集 x2”中去
  • 也能存有其确定的操作 x2

因此我们才可以把状态作为一个数据,在程序中传递它、处理它,而不是仅视其为一个惟只绑定在“数据全集 x”中的状态。

作为“状态”本身,Sx 在现在或将来,或是在“数据全集”的任意一个持有者手中,都必须以及必然是含义与可操作性7完全明确的。例如,它仅仅是一个“0、1”状态,它的操作仅有唯一的“逻辑非”操作。当然,状态可能更为复杂,但只要有与之相应的、明确的、完整的逻辑,并且这些逻辑可以独立于这一状态,可以由不同的持有者实现,我们都可以将这样的状态称为 Sx

7 我们稍后会再来讨论这一限制的实际含义。

综上,数据依赖在概念上只表明多个逻辑作用于同一个数据,它最终将被表达为面向{x,x,Sx}的操作,其中{x,x}表明被依赖的数据与其可确定的行为,而{Sx}表明一个有明确含义与可操作性的状态。

但我们并没有限制“多个逻辑”之间的时序关系。也就是说,数据依赖只用“状态”来表明:多个逻辑与数据的全集 x 都存在关系,但并不表明是一个并行系统下的关系,或是一个串行系统下的关系。例如,“(对同一数据的)多读单写”显然是数据依赖的,但在多读时多个逻辑之间是并行的,而在单写时它们却是串行的。

在我们的定义中,所谓“并发多任务”系统,是面向数据依赖的一个实现。例如,上述“多读单写”系统是可以依赖针对于某个状态的一组逻辑来实现的。更确切地说,所谓“并发模型”,其实就是8

8 并发的性能将取决于该操作集的效率,而并行的实质在于去除这个操作集。

  • 对上述状态定义一个操作集,并
  • 在多个逻辑中实现该操作集。

评论

发布