问题标签 [state-machine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
4461 浏览

java - 是否有与 libevent 等效的 Java?

我编写了一个高吞吐量服务器,它在自己的线程中处理每个请求。对于进来的请求,有时需要对一个或多个后端执行 RPC。这些后端 RPC 由单独的队列和线程池处理,它为创建的线程数和到后端的最大连接数提供了一些限制(它会进行一些缓存以重用客户端并节省不断建立联系)。不过,在完成所有这些之后,我开始认为基于事件的架构会更有效。

在四处搜索时,我没有找到任何与 Java 的 libevent 等效的东西,但也许我没有找对地方?来自 Apache 的 Mina-statemachine 是我找到的最接近的东西,但它看起来比我需要的更冗长,并且没有可用的真正版本。

有什么建议么?

0 投票
8 回答
47745 浏览

state-machine - 工作流引擎的用例

我想知道您(SO 读者)使用 Workflow Engines 解决的具体问题,以及如果您不使用自己的库/框架,您使用了哪些库/框架。我还想知道工作流引擎何时不是最佳选择,以及您是否/如何选择更简单的东西,例如使用状态机的 TaskList/WorkList/Task-Management 类型的应用程序。

问题:

  • 您使用工作流引擎解决了哪些问题?
  • 您使用了哪些库/框架?
  • 什么时候像系统这样更简单的状态机/任务管理就足够了?
  • 奖励:您是如何/如何区分任务管理工作流引擎的?

我正在寻找第一手经验。

我检查过的一些资源:

0 投票
5 回答
1991 浏览

c# - 使用 C# 中的静态类通过事件通知其他订阅者的简单状态机

我一直在尝试为我的应用程序编写一个简单的静态类状态机,以便在系统状态更改时通知其他控件和代码。而且我想我几乎拥有它,但是我遇到了一个小问题,我不确定如何解决。

这是代码:

我遇到的问题是这条线:

具体来说,“this”这个词是非法的。我明白为什么:“this”应该指回实例化对象(而不是静态类)的自身。

我宁愿为我的状态机使用一个静态类,而不是我可以实例化多个副本的静态类。(并不是说这会是一件坏事,但我觉得它使代码更干净,有一个静态类。)

那么我该怎么做呢?

更新:

作为后续行动,我选择 Jon Skeet 的答案作为正确答案,因为问题更多是关于我所采用的方法,而不是我遇到的技术故障。虽然,下面几乎所有其他答案都解决了我正在处理的技术故障。

奇怪的是,当我和我的同事审查我编写的应用程序时,她指出该程序可能应该跟踪服务器连接的状态以及正在完成的工作的状态。(是的,Virginia,这意味着我需要 2 个状态机……所以,从上面的代码中删除所有“静态”关键字并使其成为常规类是明智的方法。)

再次感谢大家!

0 投票
5 回答
19480 浏览

objective-c - 如何在 Objective-C 中制作基本的有限状态机

我正在尝试构建一个 FSM 来控制(iphone sdk)目标 c 中的计时器。我觉得这是一个必要的步骤,因为否则我会得到包含 if-then 语句页面的令人讨厌的意大利面条代码。添加/更改功能的复杂性、不可读性和困难性导致我尝试像这样更正式的解决方案。

在应用程序的上下文中,计时器的状态决定了与 NSManagedObjects、Core Data 等的一些复杂交互。我暂时忽略了所有这些功能,试图清楚地了解 FSM 代码。

问题是,我在 Obj-C 中找不到此类代码的任何示例,而且我对如何从我正在使用的 C++ 示例代码中翻译它并不太自信。(我根本不懂 C++,所以有一些猜测。)我将这个版本的状态模式设计基于这篇文章:http://www.ai-junkie.com/architecture/state_driven/tut_state1。 .html _ 我不是在制作游戏,但本文概述了适用于我正在做的事情的概念。

为了创建代码(发布在下面),我必须学习很多新概念,包括 obj-c 协议等等。因为这些对我来说是新的,就像状态设计模式一样,我希望得到一些关于这个实现的反馈。这是您在 obj-c 中有效地使用协议对象的方式吗?

这是协议:

这是 Timer 对象(最精简的形式)头文件:

以及定时器对象的实现:

不用担心这堂课有遗漏的东西。它还没有做任何有趣的事情。我目前正在努力使语法正确。目前它可以编译(并且可以工作),但是 isKindOfClass 方法调用会导致编译器警告(在协议中找不到该方法)。我不确定我是否要使用 isKindOfClass 。我正在考虑给每个id<TimerState>对象一个名称字符串并改用它。

另一方面:所有这些id<TimerState>声明最初都是 TimerState * 声明。将它们保留为属性似乎是有意义的。不确定id<TimerState>'s 是否有意义。

以下是其中一个状态类的示例:

同样,到目前为止,除了宣布它处于哪个阶段(或子状态)之外,它什么也没做。但这不是重点。

我希望在这里学到的是这个架构是否用 obj-c 语言正确组合。我遇到的一个具体问题是在计时器的 init 函数中创建 id 对象。如您所见,我注释掉了这些版本,因为它们导致了“在协议中找不到版本”警告。我不知道如何处理。

我不需要的是关于此代码过度杀伤或无意义的形式主义或其他什么的评论。即使这些想法是正确的,我也值得学习这一点。如果有帮助,请将其视为 obj-c 中 FSM 的理论设计。

预先感谢您提供任何有用的意见。

(这并没有太大帮助:Finite State Machine in Objective-C

0 投票
3 回答
6419 浏览

state-machine - 为什么这是一个无效的图灵机?

在进行考试复习时,我无法回答 Sipser 的“计算理论导论”一书中的以下问题。不幸的是,书中没有解决这个问题。

解释为什么以下不是合法的图灵机。

M = {

输入是关于变量 x1, ..., xn 的多项式 p

  1. 尝试所有可能的 x1, ..., xn 设置为整数值
  2. 在所有这些设置上评估 p
  3. 如果这些设置中的任何一个评估为 0,则接受;否则拒绝。}

这真让我抓狂!我怀疑这是因为整数集是无限的?这是否超出了字母表的允许大小?

0 投票
1 回答
861 浏览

wcf - WCF 回调错误 - 会话会发生什么?

只是想弄清楚当 WCF 出现问题时会发生什么。我有一个使用 PerSession 的 InstanceContextMode 声明的服务合同的实现......

调用发生如下:

  1. 我的客户端调用服务器并调用 GetServerUTC() 以返回服务器的当前 UTC 时间。这是一种单向调用,服务器将在客户端准备好时回调客户端(在这种情况下简单地返回当前时间!)

  2. 服务器回调到客户端,出于测试目的,在客户端的回调实现中,我抛出了一个异常。

  3. 这在客户端中未处理(出于测试目的),客户端崩溃并关闭。

  4. 在服务器上,我处理 ICommunicationObject 上的故障事件处理程序...

    obj.Faulted += new EventHandler(EventService_Faulted);

问题...

  • 这会终止服务器上当前连接的会话吗?

  • 我想我可以在这种方法中自由地做我想做的事情,例如日志记录或其他东西,但是我应该在这里做任何特定的事情来终止会话还是 WCF 会处理这个?

从最佳实践的角度来看,当回调出错时我应该怎么做?这是否意味着“您的客户发生了某些事情”并且这就是结束还是我在这里遗漏了什么?

此外,是否还有其他我应该处理的故障处理程序。

我已经阅读了很多关于 WCF 的内容,但对于出现问题时该怎么做似乎有点模糊。目前我正在我的客户端上实现一个状态机,它将管理连接并确定用户操作是否会发生,这取决于是否存在与服务器的连接 - 或者这是否是矫枉过正。

任何提示将不胜感激;)

0 投票
2 回答
1919 浏览

ruby - Ruby 中的动态状态机?状态机必须是类吗?

问题是,状态机是否总是静态定义(在类上)?或者有没有办法让我拥有它,所以类的每个实例都有它自己的一组状态?

我正在检查Stonepath以实现任务引擎。我并没有真正看到“状态”和“任务”之间的区别,所以我想我可以直接将一个任务映射到一个状态。这将使我能够动态定义任务列表(或工作流),而无需执行以下操作:

相反,一个 WorkItem(主要的工作流/任务管理器模型)只会有很多任务。然后任务会像状态一样工作,所以我可以做这样的事情:

但是,我不能用aasm gem做到这一点,因为这些方法 (aasm_stateaasm_event) 是类方法,因此具有该状态机的类的每个实例都具有相同的状态。我想要它,所以“WorkItem”或“TaskList”会根据它所拥有的任务动态地创建一系列状态和转换。

这将允许我动态定义工作流,并且只需将状态映射到任务。

状态机曾经这样使用过吗?似乎这个ruby​​ 工作流 gem与我所描述的相似。

更新:我可以看到做类似以下的事情,但它似乎有点骇人听闻:

...我的模型上的属性将在哪里implementation_state_machine。我必须重写method_missing以将与状态相关的方法 ( accepted_phase?) 委托给实现匿名类。

0 投票
2 回答
352 浏览

boost - 基于升压状态机生成类

我正在开发一个基于网络的服务器,它可能有 100 多个状态和动作/事件。到目前为止,我已经使用简单的 switch 语句进行了管理,但现在觉得需要一个状态机,我可以通过 text/xml 文件在外部配置它。

您对允许我从文件外部配置状态/事件的现有 C++ 状态机有什么建议?

我查看了 boost 状态机,但它似乎缺乏从状态机文件生成类的能力,我不想手动创建 100 个类?

还有什么其他选择?

0 投票
4 回答
761 浏览

mapping - 有限图灵机中自然语言和可识别语言的映射

我一直在努力寻找这个理论问题的答案,即使它不是直接的编程问题,我相信它确实相关。

假设一种图灵机不能超过 1000 个方格。此类可识别语言的集合与正常可识别语言的集合之间的关系是什么。

0 投票
5 回答
13582 浏览

c++ - 如何让这个 Qt 状态机工作?

我有两个可以检查的小部件,以及一个应该包含大于零的值的数字输入字段。只要两个小部件都被选中,并且数字输入字段包含大于零的值,则应启用一个按钮。我正在努力为这种情况定义一个合适的状态机。到目前为止,我有以下内容:

这里的问题是以下转换:

使状态中的所有子状态registerButtonDisabled恢复到它们的初始状态。这是不受欢迎的行为,因为我希望aandb状态保持在同一状态。

我如何确保ab保持相同的状态?有没有另一种/更好的方法可以使用状态机解决这个问题?


注意。有无数种(可以说是更好的)方法来解决这个问题。但是,我只对使用状态机的解决方案感兴趣。我认为这样一个简单的用例应该可以使用简单的状态机来解决,对吧?