• 请不要在回答技术问题时复制粘贴 AI 生成的内容
83f420984
V2EX  ›  程序员

请问什么是状态机?

  •  
  •   83f420984 · Apr 24, 2015 · 6161 views
    This topic created in 4212 days ago, the information mentioned may be changed or developed.
    昨天在某个群里讨论时,突然提出了这个概念,网上搜索了一圈,没找到理想的答案,想请大家为我解惑
    16 replies  •  2015-04-25 01:47:33 +08:00
    RIcter
    RIcter
    Apr 24, 2015 via iPhone
    2
    QWQ
    看過維基感覺看不懂呀⋯
    Cee
    Cee
    Apr 24, 2015 via iPhone❤️1
    3
    理解一下 狀態 初始狀態 終結狀態 狀態轉移的一些條件 狀態轉移表/函數
    ozking
    ozking
    Apr 24, 2015 via iPhone
    4
    lz你这是没上过学呀
    zhicheng
    zhicheng
    Apr 24, 2015 via Android
    5
    “所有的程序都是状态机,那些不会状态机的,发明了面向对象。”
    JamesRuan
    JamesRuan
    Apr 24, 2015 via Android
    6
    不是叫有限状态自动机吗?啥时候可以简称状态机了
    yangff
    yangff
    Apr 24, 2015 via Android
    7
    @JamesRuan 这不是简称
    geew
    geew
    Apr 24, 2015
    8
    wiki上不是说得很明白了么
    "表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型"
    Phoinikas
    Phoinikas
    Apr 24, 2015
    9
    http://www.wisdom.weizmann.ac.il/~dharel/SCANNED.PAPERS/Statecharts.pdf

    不过我觉得还是看看wiki的介绍就够了
    JamesRuan
    JamesRuan
    Apr 24, 2015
    10
    @yangff 好吧,我一直记得的是Automata,所以以为Machine是简称。
    arkilis
    arkilis
    Apr 24, 2015
    11
    SVM
    vChrysanthemum
    vChrysanthemum
    Apr 24, 2015
    12
    用状态机编程,酥爽酥爽的

    来个简单粗暴点的解释,既展示一个简单的状态机。

    应用场景: 客户端 向 服务端 报告自己还活着
    伪代码:

    ```
    void ReceiveClientRequest( client ) {
    if ( CONNECTING == client.requestState ) {
    //首次连接,做些初始化动作,
    }

    if ( I_AM_ALIVE == client.requestState ) {
    //client来报告还活着, do something...
    }

    if ( EXCEPTION == client.requestState ) {
    //client 异常断开了,做些清理工作
    }
    }
    ```

    以上是个简单的状态机,更经典的例子应该是正则解析。

    另: redis的主从复制流程也是简单的一个状态机


    大概理一下,一个程序运行过程中,可分为好几种状态,理清楚状态之间的转移,针对每种状态编写业务逻辑,如此,程序逻辑会清晰很多。
    ryd994
    ryd994
    Apr 24, 2015 via Android
    13
    其实是一种思考方式
    把运行中所有可能出现的情况分到有限个状态里去
    然后理清各个状态之间的相互关系,特别是状态之间如何相互转换
    这样做好,程序的大框架就有了,不会写乱
    phx13ye
    phx13ye
    Apr 24, 2015
    14
    state pattern
    0ver1oad
    0ver1oad
    Apr 24, 2015
    15
    没啥意思,如果往计算机科学方向讲就是自动机理论那一块. 如果有兴趣可以上coursera上找斯坦福的课程学习. 现实开发中, 定义一个变量记录下当前程序的运行状态, 在switch循环中执行相应代码也可称为状态机.
    Rothschild
    Rothschild
    Apr 25, 2015
    16
    这就是非科班出身啊,大二大三自动机理论, 编译原理就讲的东西
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2442 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 68ms · UTC 15:37 · PVG 23:37 · LAX 07:37 · JFK 10:37
    ♥ Do have faith in what you're doing.