状态机

Windows Workflow Foundation之旅(六)——框架组成、工作流创作模式

被刻印的时光 ゝ 提交于 2020-03-16 06:38:48
Windows Workflow Foundation 之旅(六)——框架组成 翻译自: ms-help://MS.WinWF.v1.EN/WinWF_GettingStarted/html/68db11eb-3d20-41ca -90f 7-ae635fd4e 2a 2.htm 这个专题前面的三个指南,介绍了 WWF 编程了三个大方面: 顺序工作流 、 状态机工作流 和自 定义活动 。相信大家对 WWF 的编程模型已经有了一个初步的了解。从这次开始,我们就要深入 WWF ,全面的探究一下 WWF 。 传统的编程语言是针对短期运行应用程序的,缺乏 持久化 和 抗中断 的功能支持。 WWF 是一个框架,不是一种语言。他对工作流应用程序有深刻的认识,提供了各种手段来处理持久化,中断补偿,故障恢复等功能。 WWF 同时具有 灵活性 和 可扩展性 。你可以直接用代码定义工作流,也可以用外部的定义语言也定义,或同时使用两者。你可以用你自己的自定义活动来实现自定义的工作流模式,以到达可重用的目的。 WWF 支持 模型驱动 的开发,提供了 可视化 的设计工具,并隐藏了一些系统级的功能,如事务、状态管理和并发控制,是开发者可以专注于业务模型。 WWF 中的工作流和活动 工作流 是一组相关的活动的集合。 活动 是 WWF 中可建模、可编程、可重用、可执行的原子单位。 WWF 提供了一组丰富的活动库

FPGA状态机跑飞问题记录

六月ゝ 毕业季﹏ 提交于 2020-03-10 13:20:32
(1)状态机跑飞的原因 两种可能:1)状态机的输入信号与本地时钟不同步,出现了冒险竞争现象,造成状态机死锁。 2)状态机综合后没有生成一旦进入非有效状态便立即复位,然后进入某个有效状态的电路。 解决办法:1)把外部引入的异步输入信号,做同步处理,作为本状态机的输入。 2)用综合指令或者约束,强行规定综合后必须生成一旦进入非有效状态便立即复位随即进入有效状态的电路。 输入信号是指除了从当前状态反馈信号以外的信号,即从状态机外部输入的信号。 是否会产生一旦进入非有效状态立即进行强制复位的电路,并不会因为你在状态机中加入when others=> state1 综合后就一定生成这样的电路。若想生成这样的电路,必须在综合时要通过综合指令(约束)命令综合器强制生成,才会生成的。 原文链接:https://blog.csdn.net/xiaoxiao_rabbit/article/details/102751545 (2)问题记录 本次的状态机跑飞的原因是第一种,即:状态机的输入信号与本地时钟不同步,出现了冒险竞争现象,造成状态机死锁 实验:使用状态机按键防抖,实现二进制累加,二进制的表现形式为四个LED灯 最初代码:(注:变量abcd没有任何意义,仅在调试中使用) 1 module key_detect( 2 clk , 3 rst_n , 4 key , 5 led , 6 abcd ,

状态机使用小结

亡梦爱人 提交于 2020-03-05 00:51:47
背景 最近做发票的开具和冲销业务,其中有N多状态。于是想到了状态机模式,减少条件判断,让业务逻辑更清晰。回头增加或者减少状态,自己也能快速建立全局视图。理想很丰满,现实很骨感。 技术选型之路 作为Java开发,首先想到的是Spring家族的状态机,毕竟Spring够强大。一顿操作运行起来之后,发现得先整理自己的基本预期和诉求,如下: 业务对象本身有个状态字段,状态机每次基于该字段做初始化; 业务对象所能接收的事件,其字段内容应该可轻松扩展; 状态转换过程中的事务与业务上下文强一致; 对应到Spring State Machi,后面简称SSM。 初始化。SSM是基于全局状态机。何为全局状态机,即状态机初始化之后,状态保持所有节点和边的对应的对象,服务于后续具体的状态转换。官方文档也提到属于重量级对象,建议全局唯一。也正式这个原因,在使用过程中存在并发问题,使用不当可能导致死锁。状态转换完成后,需要实现特定的持久化接口完成状态机的状态保存。 事件。事件是基于枚举的和注解的,这条是最狠的。枚举的内容,不能修改。也就意味着事件只有类型这么一个可变参数。 至于状态迁移暴露出的各种事件接口,只能说强大到许多都用不上。 事务边界难以控制,因为内部实现有看不见的异步任务。 小结下SSM,有点儿类似于一个状态机引擎,偏重量级,事件对象表示不够丰富,事务控制个人水平原因吧不敢保证。 工期原因就自己开发

设计模式——状态机

若如初见. 提交于 2020-03-03 12:37:04
引入 最近在做商城项目,负责订单模块的开发,在浏览微信支付官方文档的时候,在统一下单API文档中提到了“状态机”的概念,由此联想到我们的代码实现可以应用这个模式。 概念 状态模式是一种行为模式,在不同的状态下有不同的行为。状态模式的行为是平行的,不可替换的,比如电梯状态可以分为开门状态,关门状态,运行中状态。状态模式把对象的行为包装在不同的状态对象里,对象的行为取决于它的状态,当一个对象内部状态改变时,行为也随之改变。 意义 状态机可以对业务状态进行梳理,使项目结构更加清晰,提高代码可读性,同时可以轻松应对不断增加的业务场景。 实现(订单主流程) 在实现方面,把业务拆解成【状态枚举、事件枚举、 状态机配置、 状态机监听器】四个核心部分。 在 状态枚举 中列出订单的所有状态; 在 事件枚举 中列出触发订单状态切换的行为; 在 状态机配置 中配置业务流程中的种种行为和行为发生时的原始状态到目标状态的切换,我喜欢把每一个配置的触发称为“ 部件启动 ”; 状态机监听器 负责监听状态机配置中的状态机部件启动,控制业务流程的走向。 业务流程 项目结构 States 状态枚举 public enum States { /** 待提交 */ PENDING_SUBMIT, /** 待支付 */ PENDING_PAYMENT, /** 已支付 */ ALREADY_PAID, /** 用户取消 *

TCP协议笔记

只谈情不闲聊 提交于 2020-03-01 17:33:02
目录 1. TCP协议主要内容 2. TCP状态机 详情 1. TCP协议主要内容 思维导图地址: https://kdocs.cn/l/s3wo0iK7V?f=130 2. TCP状态机 (该状态机图非本人所画,某未知姓名大神所画,本人从网络下载模仿还原此图) 源文件地址: https://kdocs.cn/l/sVGew8DXh?f=130 来源: oschina 链接: https://my.oschina.net/lovexin/blog/3173992

使用enum建立简单的状态机

拈花ヽ惹草 提交于 2020-03-01 09:36:18
Overview The enum in Java is more powerful than many other languages which can lead to surprising uses. In this article, I outline some the individual features of enum in Java, and put them together to form a state machine. Enum for Singleton and Utility class You can use an enum as a Singleton or Utility very simply. enum Singleton { INSTANCE; } enum Utility { ; // no instances } Enum to implement an interface You can also implement an interface in an enum. interface Named { public String name(); public int order(); } enum Planets implements Named { Mercury, Venus, Earth, Mars, Jupiter,

幂等性笔记

一世执手 提交于 2020-02-27 15:12:34
高并发下接口幂等性解决方案 一、幂等性概念 在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“getUsername()和setTrue()”函数就是一个幂等函数. 更复杂的操作幂等保证是利用唯一交易号(流水号)实现. 我的理解:幂等就是一个操作,不论执行多少次,产生的效果和返回的结果都是一样的。 二、幂等性场景 1、查询操作:查询一次和查询多次,在数据不变的情况下,查询结果是一样的。select是天然的幂等操作; 2、删除操作:删除操作也是幂等的,删除一次和多次删除都是把数据删除。(注意可能返回结果不一样,删除的数据不存在,返回0,删除的数据多条,返回结果多个) ; 3、唯一索引:防止新增脏数据。比如:支付宝的资金账户,支付宝也有用户账户,每个用户只能有一个资金账户,怎么防止给用户创建资金账户多个,那么给资金账户表中的用户ID加唯一索引,所以一个用户新增成功一个资金账户记录。要点:唯一索引或唯一组合索引来防止新增数据存在脏数据(当表存在唯一索引,并发时新增报错时,再查询一次就可以了,数据应该已经存在了,返回结果即可); 4、token机制:防止页面重复提交。 原理上通过session token来实现的(

HDL设计之低功耗设计

混江龙づ霸主 提交于 2020-02-25 10:52:34
本文转载自IamSarah博友的原创文章! 最近在看《硬件架构的艺术》这本书,本篇博文也是来自书中的内容。随着工艺的进步,低功耗设计显得越来越重要了。作为一个数字前端设计师,我们就来看看如何在RTL级别减低功耗。实质上在大规模ASIC设计中,当RTL级设计完成的时候,整个系统至少80%的功耗就已经确定。后端流程没有办法修复微架构,而微架构和RTL代码风格对于动态和静态功耗有极大的影响。下面就说说在RTL级别可以从哪几个方面降低功耗。 状态机的编码和解码 在各种状态机的编码中,格雷码是最适合低功耗设计的。因为它在状态转换过程中每次只有一个触发器变化,因此格雷码编码的状态机也消除了依赖于状态组合等式中存在毛刺的风险。图中是二进制编码和格雷码编码的比较。 二进制数表示方法 在大多数的应用中都是用补码表示有符号数的,但是原码与补码切换过程中,很多位都发生变化,与之相比,有符号数的变化较少,如图所示0,1的补码和有符号数表示。选用哪种表示方法,还是应该看具体的应用场合。 门控时钟 之前的博文中也有详细的介绍过门控时钟,这里主要从编码角度来对门控时钟进行说明。编码过程中应当考虑一下后端工具是否可以在环境设置的加入门控时钟。这里主要是举例说明,先看如下的RTL代码以及逻辑实现: 这种写法,综合的结果是32个mux2,但如果换成如下的描述方式,某些后端工具就有可能会识别出来load

(动态规划,状态机) leetcode 股票问题

泄露秘密 提交于 2020-02-21 11:08:58
https://leetcode.com/problems/best-time-to-buy-and-sell-stock/ 思路参考链接: https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/solution/yi-ge-fang-fa-tuan-mie-6-dao-gu-piao-wen-ti-by-lab/ 个问题的「状态」有三个,第一个是天数,第二个是允许交易的最大次数,第三个是当前的持有状态(即之前说的 rest 的状态,我们不妨用 1 表示持有,0 表示没有持有)。然后我们用一个三维数组就可以装下这几种状态的全部组合: class Solution { public: int maxProfit(vector<int>& prices) { int dp_i_0 = 0, dp_i_1 = INT_MIN; //base case for(int i=0; i<prices.size(); ++i){ dp_i_0 = max(dp_i_0, dp_i_1+prices[i]); dp_i_1 = max(dp_i_1, -prices[i]); } return dp_i_0; } }; https://leetcode.com/problems/best

FPGA/CPLD状态机稳定性研究

☆樱花仙子☆ 提交于 2020-02-19 19:45:33
摘要 在FPGA/CPLD设计中频繁使用的状态机,常出现一些稳定性问题,本文提出了一些解决方法,实验表明该方法有效地提高了综合效率.   随着大规模和超大规模FPGA/CPLD器件的诞生和发展,以HDL(硬件描述语言)为工具、FPGA/CPLD器件为载体的EDA技术的应用越来越广泛.从小型电子系统到大规模SOC(Systemonachip)设计,已经无处不在.在FPGA/CPLD设计中,状态机是最典型、应用最广泛的时序电路模块,如何设计一个稳定可靠的状态机是我们必须面对的问题. 1、状态机的特点和常见问题 标准状态机分为摩尔(Moore)状态机和米立(Mealy)状态机两类.Moore状态机的输出仅与当前状态值有关,且只在时钟边沿到来时才会有状态变化.Mealy状态机的输出不仅与当前状态值有关,而且与当前输入值有关,这一特点使其控制和输出更加灵活,但同时也增加了设计复杂程度.其原理如图1所示.   根据图1所示,很容易理解状态机的结构.但是为什么要使用状态机而不使用一般时序电路呢?这是因为它具有一些一般时序电路无法比拟的优点. 用VHDL描述的状态机结构分明,易读,易懂,易排错; 相对其它时序电路而言,状态机更加稳定,运行模式类似于CPU,易于实现顺序控制等. 用VHDL语言描述状态机属于一种高层次建模,结果经常出现一些出乎设计者意外的情况: 在两个状态转换时,出现过渡状态.