Sobes.tech
Junior — Middle

Kuidas on süsteemis oleku planeerija töö loogika rakendatud?

sobes.tech AI

Vastus AI-lt

Oleku oleku (state machine scheduler) süsteemis raksturo bieži stāvokļu pāreju loģiku objekta vai procesa stāvokļiem, balstoties uz notikumiem un nosacījumiem.

Go valodā to var īstenot ar:

  • Stāvokļu definēšanu kā konstanti vai tipu.
  • Pāreju apstrādei izmantojot switch vai kartes.
  • Kanālus notikumu saņemšanai un asinhronai pārvaldībai.

Vienkāršs beigu stāvokļu mašīnas piemērs:

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("Algusolek:", state)

    state = stateMachine(state, EventStart)
    fmt.Println("Pēc sākuma notikuma:", state)

    state = stateMachine(state, EventStop)
    fmt.Println("Pēc apstāšanās notikuma:", state)
}

Reālos sistēmos plānotājs var izmantot sarežģītākas struktūras, taimerus, kļūdu pārvaldību un paralēlismu, lai pārvaldītu stāvokļus.