V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
83f420984
V2EX  ›  程序员

请问什么是状态机?

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

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

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

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

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

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

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

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

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


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