2010年8月6号---PDS之主要数据管理和存储内容解析
以下内容是对较低版本的RedDwarf的主要内容的汇总,来自于帮助文档,但是这都是个人的理解和记录,方便我自己阅读,会有很多翻译的不好,如果有兴趣的朋友应该只作为参考,具体的请阅读帮助文档。
Goals and Philosophy
为了理解PDS的代码模式,理解它的目标或许会有帮助。它的基本目标如下:
* 以一种针对程序开发者显而易见的方式来保证服务端游戏代码的可靠性、可升级性以及良好的容错性。
* 以一种单线程事件驱动的程序模型呈献给开发者。开发者永远都不用将自己的代码错误归罪于代码在执行不同事件时可能出现的错误。
Approach to Execution
Task and Managers
从PDS应用程序开发者的角度来看,PDS应用程序执行以一种看上去是单播螺纹(monothreaded)、事件驱动的模型。代码处理事件机制满足了代码编写者对自己所做任何数据修改的唯一所有权。那么,应用程序执行就会是race-proof和deadlock-proof.在大多数条件下没有必要写同步的应用程序代码,而且事实上,如果试图使用synchronized关键字在ManagedObject将会引发一些微小的bugs。
事实上,系统会有很多线程来控制所有的同时处理的事件。这些控制线程被称作Tasks。系统会记录哪一个task能够访问什么数据。如果这其中task之间出现了冲突,那么其中一个task会失败并且会按照规定在晚一些的一个事件重试,这样另外一个task就能够完成事件并且跳出冲突。
Tasks是由PDS Manager来生成。一个PDS应用程序会在PDS环境中或者外部世界中使用这些manager来实现各种功能。
在系统中,有三种标准管理器。另外一些其他类型的管理器也会被编写和加入到PDS环境中。这三种标准管理器是:
* Task Manager
一个PDS应用程序可以使用Task Manager来排列它所拥有的任务。Tasks可以被排列为即时执行、延迟执行或者周期性执行。又其他tasks穿件的task被称作是child tasks.这些来排列child task的task被称作是parent task。有多重child tasks被一个parent tasks所排列那么这些child tasks被称作是sibling tasks(兄妹task)。
* Data Manager
一个PDS应用程序可以使用Data Manager来创建和访问持久化的和分布式的对象,这些对象被称作是Managed Objects。而PDS应用程序本身就是由这些Managed Objects组成的。
* Channel Manager
一个PDS应用程序可以使用Channel Manager来创建和控制发布或者是认证数据通道(Channel Data)。这些数据通道被用来在一群客户端和服务器之间的通信。
一个PDS应用程序通过AppContext类来获得对PDS功能性代码的访问,AppContext来提供方法包含各种Managers的引用。
Task Ordering
Tasks被保证顺序执行由客户端产生的事件。一个Task处理一个客户端事件会在所有的比它早的所有的来处理该客户端事件的tasks执行完之后才会执行。一个子事务被排序是和它的父事务有关的,而不是和它的兄妹事务有关。这就意味着一个子事务在它的父事务完全执行完之前是不会执行的。同时,这并不会保证兄妹事务之间的执行回按照顺序。
Important: 在系统中,并没有其他的顺序执行的保证。尤其是,那些来执行不同用户的事件的事务的执行并不会被保证按照它们到达服务端的顺序关系来决定谁先开始执行。
Task Lifetime
Tasks必须是短生命周期的这就决定了它们不会阻塞过度占用其他事务访问资源的时间。PDS被配置为它的操作都有一个最大的时间限制。任何一个在规定时间内没有完成的task都将会被强制终止。
如果你的一个task运行时间过长,那么就会有两种倾向于减少运行时间的方法:
* 把它切分为一连串子事务,每一个子事务处理一段彼此没有联系的该问题的一部分,然后按照先后次序执行顺序执行下一个子事务。这就是所谓的continuation-passing 模式。
* 将那些时间要求强烈计算放入一个特定的manager中区,最后产生一个顺序的任务结果。
Managed Objects and Managed References
DataManager维护着那些持久化的存储在一个对象池中的Managed Objects,这个对象池叫做Object Store。像每一个普通的Java对象,每一个Managed Object包含数据和方法两样来数据进行处理。作为一个Managed Objects,这个对象必须要实现ManagedObject和Seriablizable接口。一个Managed Object并不会成为对象存储池中的一员,直到对象存储池意识到了它。而意识到它就需要使用Data Manager为这个对象请求一个Managed Reference或者为这个对象绑定一个名字。
一个Managed Reference 是一个引用对象类似于J2SE中的引用对象(比如:SoftReference,WeakReference)。Managed Objects必须提交到其他的Managed Ojbects之中去。这就是Data Manager能够告诉你一个Managed Object的一个组件的引用作为一个列表中的Managed Object的状态和一个分离的Managed Object它自己的状态之间的不同的原因。
一个name绑定用一个字符串来和Managed Object绑定起来,这样其他的tasks(事务)就会在Data Manageer中通过getBing来唤回这个对象。
Accessing Managed Objects through Managed Reference
Managed Reference有两种方法方法:get方法和getForUpdate方法。这两种方法都会返回这个对象的一个本地task(task-local)的引用。这两种方法的区别是:
* getForUpdate 通知系统你将会修改Managed Object 的状态。
* get 告诉你将会只是读取这个状态而不会写入它。
尽管会有持续不断的修改来操作与任何一个Managed Object,但是在你知道在什么时候修改Managed Object 的状态时,使用getForUpdate会更加有效。这个方法允许系统取法心爱你不同事物并且会让他们更早更加有效的处理之间的冲突。
反过来说,如果不对Managed Object的状态值进行修改,那么使用get方法会更好一点。在多事务情况下get方法的调用会允许有更多的平行访问对于Managed Object。如果你到达这个状态的修改点比较晚了一点,但是你要修改这个状态值,那么你可以升级你的get方法到getForUpdate方法利用Data Managed 的markForUpdate方法。多事务处理过程中,对同一个Managed Object调用升级是无害的。
在同一个事务中,后续的和前边的具有相当的Managed Reference那么调用get和getForUpdate将会返回相同的task-local拷贝。
你也可以利用getBinding方法利用bound name返回一个Object Store中的Managed Object。
一旦Object Store中有的Managed Object被意识到了,那么它就会保持这个对象的状态值,直到Data Manager调用removeObject方法从Object Store中明确的删除了这个对象。应用程序负责管理Object Store中的Managed Object 的生命周期,并在他们永远不再需要的时候删除它们。但是Object Store中垃圾的逐渐增多可能会影响它的行为,导致操作失败。同样的,存储的name binding的对象,会通过removeBinding 方法明确的移除。一个name binding对象的引用被移除,那么它就会被销毁。
分享到:
相关推荐
总结来说,“tencentcloud-sdk-python-pds-3.0.493.tar.gz”是腾讯云为Python开发者提供的PDS服务SDK,通过这个资源,开发者可以轻松集成PDS服务,实现高效的数据存储和管理功能。了解和掌握这个SDK的使用,对于提升...
总结来说,tencentcloud-sdk-python-pds-3.0.501.tar.gz是腾讯云PDS服务的Python SDK,为Python开发者提供了便捷的接口,以便在后端开发中轻松实现数据存储和管理。这款SDK的使用,不仅能提升开发效率,还能降低开发...
3:2022 Adjustable speed electrical power drive systems - Part 3:EMC requirements and specific test methods for PDS and machine tools - (可调速电力驱动系统 - 第 3 部分:PDS 和机床的 EMC 要求和特定...
研祥17"工业级平板显示器PDS-1703产品样本pdf,研祥17"工业级平板显示器PDS-1703产品样本:PDS-1703是一款高性价比的工业级平板显示器,具有屏幕亮度、对 比度调节和菜单功能;安装方式兼容面板型、壁挂式和VESA 标准...
PDS 是 ChinaPGP 项目组最新开发的基于命令行的分组数据加密引擎,旨在为个人用户提供一种可供选择且易于使用的数据加密解决方案。PDS 支持以批处理文件方式进行文件加密,以命令行方式在DOS控制台下进行文件加密和...
资源分类:Python库 所属语言:Python 资源全名:tencentcloud-sdk-python-pds-3.0.558.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源分类:Python库 所属语言:Python 资源全名:tencentcloud-sdk-python-pds-3.0.561.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源分类:Python库 所属语言:Python 资源全名:tencentcloud-sdk-python-pds-3.0.527.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
综合布线系统作为现代建筑和数据中心的基础,其稳定性和可靠性的重要性毋庸置疑。在过去的两年里(2021-2022年),我们收集并整理了一系列专题课件,以期为维护和保养工作提供详尽的指导。本文档《精品专题(2021-...
PDS是一个国际性的数据中心,存储了从地球外空间探索任务收集的各种科学数据,包括月球、火星、小行星以及其他天体的数据。 在Python环境中,`pds-api-client`库提供了方便的接口,使得用户能够轻松地查询、下载和...
《SEI配管PDS培训手册》是一份深入解析PDS配管建模技术的专业教程,旨在帮助工程师理解和掌握在工程管道燃气阀门设计中的关键步骤和操作。文档共计28页,涵盖了从基础的绘图命令到高级的自动布管等多方面的内容。 1...
本资源摘要信息主要介绍了Reson PDS软件在多波束数据采集方面的应用,涵盖了时钟同步、实时显示、实时控制、数据记录、多显示器设置等方面的知识点。 1. 时钟同步(Clock Synchronization) 时钟同步是Reson PDS...
建伍 德士 PDS20-18 36-10 60-6系列可编程直流电源电路原理图
PDS-760系列数字式保护测控装置是国电南京自动化股份有限公司推出的一系列保护测控装置,主要应用于发电厂厂用电系统、大型工厂和矿山以及企业的厂用电部分。该系列装置覆盖了馈电线路保护、并联电容器保护、电动机...
- **装载焊点号/修改焊点类型**:掌握如何管理焊接点的数据,包括焊点编号和类型的修改。 - **定义管件组/批准管线**:理解如何组织和分类管件,以及如何正式批准管线设计。 综上所述,《PDS配管建模培训教材》是...
在PDS2000软件中,项目文件是一个核心概念,用于存储项目的所有设置和数据。用户可以创建新的项目文件,也可以打开已有的项目文件。项目文件可以存储在‘PDS2000 Projects’目录下,该目录位置可以由用户自己定义。 ...
《基于Visio的信息化设计——以财大附中网络系统PDS图为实例》 在当前信息化社会中,网络系统...通过对财大附中网络系统PDS图的解析,我们可以更好地理解和应用Visio在实际项目中的功能,进一步推动信息化设计的发展。
变频器说明书大全系列-jps-PDS.rar是一个包含详尽信息的文档集合,主要针对jps品牌的PDS系列变频器。在这个压缩包中,最重要的文件是“jps-PDS.DOC”,它很可能是该系列变频器的操作手册或者技术指南。变频器是一种...
- 特点:以访问方式命名的数据集类型,支持高效的数据管理和检索。 - 应用场景:适用于需要频繁随机访问的应用程序。 #### 四、数据集的存储方式 z/OS系统中的数据集通常存储在直接访问存储设备(Direct Access ...
《IEC 61800-3_2022可调速电力驱动系统第3部分:PDS和机床的EMC要求和特定试验方法》是国际电工委员会(IEC)发布的一项标准,旨在规范可调速电力驱动系统的电磁兼容性(EMC)要求,确保这些系统在实际应用中的稳定...