狀態機併發
狀態機的概念是來自硬件的。描述一系列狀態轉換的電路叫狀態機。主要用來實現一個數字系統設計中的控制部分。運行模式相似於CPU,但和CPU相比,具備結構簡單、易讀易懂等特色。設計
對於無限個狀態(無限狀態機,Infinite State Machine,ISM)是難以檢證的,因此這裏所說的狀態機一般是指有限狀態機或有窮狀態機,即Finite State Machine,FSM。對象
狀態模式能夠容許客戶端改變狀態的轉換行爲,而狀態機則是可以自動改變狀態,狀態機是一個比較獨立的並且複雜的機制。事件
狀態機看上去就像是一個有向圖,其中狀態是圖的節點,而狀態轉換則是圖的邊。get
此外這些狀態中還必須有一個初始狀態和至少一個接受狀態。it
可是因爲一些緣由並不會執行初始化(initialization),而是直接經過一個節點進入狀態是容許的,則此節點稱之爲進入節點(Entry Point)。io
進入終了狀態的節點稱爲退出節點(Exit Point)硬件
轉移(Transitions)是兩個狀態之間的一種關係,表示對象將在源狀態(Source State)中,由於預先定義的觸發器的發生致使警界條件知足時進入目標狀態(Target State)。客戶端
觸發器(Trigger):是轉移的誘因,能夠是一個信號,事件、條件變化(a change in some condition)和時間表達式。系統設計
警界條件(Guard Condition):當警界條件知足時,事件纔會引起轉移(Transition)。
結果(Effect):對象狀態轉移後的結果。
狀態能夠有返回自身狀態的轉移,稱之爲自身轉移(Self-Transitions)。
動做(Actions)是一個可執行的原子操做,也就是說動做是不可中斷的,其執行時間是可忽略不計的。
源狀態 Source State :即受轉換影響的狀態
目標狀態 Target State :當轉換完成後,對象的狀態
觸發事件 (Trigger) Event :用來爲轉換定義一個事件,包括調用、改變、信號、時間四類事件
監護條件 (Guard Condition) :布爾表達式,決定是否激活轉換、
動做 (Action) :轉換激活時的操做
對象狀態轉移後的結果顯示在轉移線上,若是目標狀態有許多轉移,並且每一個轉移有相同的結果,這時把轉移後的結果(Effect)展現在目標狀態中(Target State)更好一些,能夠定義進入動做(Entry Action )和退出動做(Exit Action)
嵌套在另一個狀態中的狀態稱之爲子狀態(sub-state),一個含有子狀態的狀態被稱做組合狀態(Compound States)。
歷史狀態(History States)是一個僞狀態(Pseudostate),其目的是記住從組合狀態中退出時所處的子狀態,當再次進入組合狀態,可直接進入這個子狀態,而不是再次從組合狀態的初態開始。
併發區域(Concurrent Regions)
狀態圖能夠分爲區域,而區域又包括退出或者當前執行的子狀態。說明組合狀態在某一時刻能夠同時達到多個子狀態。
狀態,存儲了關於過去的信息,就是說:它反映從系統開始到如今時刻的輸入變化。
轉移指示狀態變動,而且用必須知足確使轉移發生的條件來描述它。
動做是在給定時刻要進行的活動的描述。有多種類型的動做:
進入動做(entry action):在進入狀態時進行
退出動做:在退出狀態時進行
輸入動做:依賴於當前狀態和輸入條件進行
轉移動做:在進行特定轉移時進行