Sobes.tech
Junior — Middle

Kaip įgyvendinta būsenų planuotojo veiklos logika sistemoje?

sobes.tech AI

Atsakymas iš AI

Būsenų tvarkyklė (state machine scheduler) sistemoje dažniausiai įgyvendina objektų ar proceso būsenų perėjimo logiką, pagrįstą įvykiais ir sąlygomis.

Go kalboje tai galima įgyvendinti naudojant:

  • Būsenų apibrėžimą kaip konstantas arba tipus.
  • Naudojant switch arba žemėlapius perėjimams apdoroti.
  • Kanalus įvykiams gauti ir asinchroniškai valdyti.

Paprastas baigtinės būsenų mašinos pavyzdys:

package main

import "fmt"

type State int

const (
    StateIdle State = iota
    StateRunning
    StateStopped
)

type Event int

const (
    EventStart Event = iota
    EventStop
)

func stateMachine(current State, event Event) State {
    switch current {
    case StateIdle:
        if event == EventStart {
            return StateRunning
        }
    case StateRunning:
        if event == EventStop {
            return StateStopped
        }
    }
    return current
}

func main() {
    state := StateIdle
    fmt.Println("Pradinis būsenos:", state)

    state = stateMachine(state, EventStart)
    fmt.Println("Po pradžios įvykio:", state)

    state = stateMachine(state, EventStop)
    fmt.Println("Po sustojimo įvykio:", state)
}

Realiuose sistemose planuotojas gali naudoti sudėtingesnes struktūras, laikmačius, klaidų valdymą ir paralelizaciją, kad valdytų būsenas.