当前位置: 首页 > news >正文

攻击jsp网站普洱建设网站

攻击jsp网站,普洱建设网站,北京外贸营销网站建设费用,网站推广软件推广Yarn的状态机框架分析 什么是状态机 状态机(State Machine)#xff0c;是有限状态自动机的简称。简单解释#xff1a;给定一个状态机#xff0c;同时给定它的当前状态和输入#xff0c;那么输出状态时可以明确的运算出来的。 yarn中的状态机 YARN将各种处理逻辑抽象成事…Yarn的状态机框架分析 什么是状态机 状态机(State Machine)是有限状态自动机的简称。简单解释给定一个状态机同时给定它的当前状态和输入那么输出状态时可以明确的运算出来的。 yarn中的状态机 YARN将各种处理逻辑抽象成事件和对应事件调度器 并将每类事件的处理过程分割成多个步骤 用有限状态机表示。 在Yarn中App、AppAttempt、Container、Node都可以使用状态机表示。其中 RMApp:用于维护一个Application的生命周期 RMAppAttempt:用于维护一次尝试运行的生命周期 RMContainer:用于维护一个已分配的资源最小单位Container的生命周期 RMNode:用于维护一个NodeManager的生命周期。 关于yarn的处理过程 状态机是与事件模型结合使用的在Service中注册转调度处理器然后在处理器使用状态机。 整个处理过程大致为 处理请求会作为事件进入系统 由异步调度器AsyncDispatcher 负责传递给相应事件调度器Event Handler 。 该事件调度器可能将该事件转发给另外一个事件调度器 也可能交给一个带有有限状态机的事件处理器 其处理结果也以事件的形式输出给中央异步调度器。 而新的事件会再次被中央异步调度器转发给下一个事件调度器 直至处理完成达到终止条件 。 使用状态机的目的 Yarn状态机就负责合理地组织这些状态转换流程快速找到指定初始状态和事件类型对应的状态转换方法。 状态机举例 例如对于一个应用RMApp而言RMApp存在一个初始状态处理事件时会根据事件类型匹配对应的转换类Transition将RMApp从初始状态转化成目标状态。RMApp经历的流程为初始状态–转换方法–目标状态将其所有流程汇总起来就是状态机。 各个使用状态机的事件处理类依赖状态工厂类StateMachineFactory完成了状态机的初始化。将状态机的处理流程通过链表结构TransitionsListNode进行组成。 在RMActiveServices的serviceInit方法中注册RMAppEventType事件的调度处理器ApplicationEventDispatcher // Register event handler for RmAppEvents rmDispatcher.register(RMAppEventType.class,new ApplicationEventDispatcher(rmContext));ApplicationEventDispatcher中去让RMApp的实现类RMAppImpl处理事件。 Override public void handle(RMAppEvent event) {ApplicationId appID event.getApplicationId();RMApp rmApp this.rmContext.getRMApps().get(appID);if (rmApp ! null) {try {rmApp.handle(event);} catch (Throwable t) {LOG.error(Error in handling event type event.getType() for application appID, t);}} }RMAppImpl的handle方法中通过调用状态的的转换方法doTransition来改变RMApp对象状态。 public void handle(RMAppEvent event) {this.writeLock.lock();try {ApplicationId appID event.getApplicationId();LOG.debug(Processing event for appID of type event.getType());final RMAppState oldState getState();try {/* keep the master in sync with the state machine */this.stateMachine.doTransition(event.getType(), event);} catch (InvalidStateTransitionException e) {LOG.error(App: appID cant handle this event at current state, e);onInvalidStateTransition(event.getType(), oldState);}// Log at INFO if were not recovering or not in a terminal state.// Log at DEBUG otherwise.if ((oldState ! getState()) (((recoveredFinalState null)) ||(event.getType() ! RMAppEventType.RECOVER))) {LOG.info(String.format(STATE_CHANGE_MESSAGE, appID, oldState,getState(), event.getType()));} else if ((oldState ! getState()) LOG.isDebugEnabled()) {LOG.debug(String.format(STATE_CHANGE_MESSAGE, appID, oldState,getState(), event.getType()));}} finally {this.writeLock.unlock();}}简化实验 简化类图 #mermaid-svg-jdC9AOiCbtr8JiHt {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jdC9AOiCbtr8JiHt .error-icon{fill:#552222;}#mermaid-svg-jdC9AOiCbtr8JiHt .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jdC9AOiCbtr8JiHt .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-jdC9AOiCbtr8JiHt .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jdC9AOiCbtr8JiHt .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jdC9AOiCbtr8JiHt .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jdC9AOiCbtr8JiHt .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jdC9AOiCbtr8JiHt .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jdC9AOiCbtr8JiHt .marker.cross{stroke:#333333;}#mermaid-svg-jdC9AOiCbtr8JiHt svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jdC9AOiCbtr8JiHt g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-jdC9AOiCbtr8JiHt g.classGroup text .title{font-weight:bolder;}#mermaid-svg-jdC9AOiCbtr8JiHt .nodeLabel,#mermaid-svg-jdC9AOiCbtr8JiHt .edgeLabel{color:#131300;}#mermaid-svg-jdC9AOiCbtr8JiHt .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-jdC9AOiCbtr8JiHt .label text{fill:#131300;}#mermaid-svg-jdC9AOiCbtr8JiHt .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-jdC9AOiCbtr8JiHt .classTitle{font-weight:bolder;}#mermaid-svg-jdC9AOiCbtr8JiHt .node rect,#mermaid-svg-jdC9AOiCbtr8JiHt .node circle,#mermaid-svg-jdC9AOiCbtr8JiHt .node ellipse,#mermaid-svg-jdC9AOiCbtr8JiHt .node polygon,#mermaid-svg-jdC9AOiCbtr8JiHt .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jdC9AOiCbtr8JiHt .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-jdC9AOiCbtr8JiHt g.clickable{cursor:pointer;}#mermaid-svg-jdC9AOiCbtr8JiHt g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-jdC9AOiCbtr8JiHt g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-jdC9AOiCbtr8JiHt .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-jdC9AOiCbtr8JiHt .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-jdC9AOiCbtr8JiHt .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-jdC9AOiCbtr8JiHt .dashed-line{stroke-dasharray:3;}#mermaid-svg-jdC9AOiCbtr8JiHt #compositionStart,#mermaid-svg-jdC9AOiCbtr8JiHt .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-jdC9AOiCbtr8JiHt #compositionEnd,#mermaid-svg-jdC9AOiCbtr8JiHt .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-jdC9AOiCbtr8JiHt #dependencyStart,#mermaid-svg-jdC9AOiCbtr8JiHt .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-jdC9AOiCbtr8JiHt #dependencyStart,#mermaid-svg-jdC9AOiCbtr8JiHt .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-jdC9AOiCbtr8JiHt #extensionStart,#mermaid-svg-jdC9AOiCbtr8JiHt .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-jdC9AOiCbtr8JiHt #extensionEnd,#mermaid-svg-jdC9AOiCbtr8JiHt .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-jdC9AOiCbtr8JiHt #aggregationStart,#mermaid-svg-jdC9AOiCbtr8JiHt .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-jdC9AOiCbtr8JiHt #aggregationEnd,#mermaid-svg-jdC9AOiCbtr8JiHt .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-jdC9AOiCbtr8JiHt .edgeTerminals{font-size:11px;}#mermaid-svg-jdC9AOiCbtr8JiHt :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} implements implements implements implements «interface» StateMachine STATE getCurrentState() STATE doTransition(EVENTTYPE eventType, EVENT event) «interface» SingleArcTransition void transition(OPERAND operand, EVENT event) «interface» MultipleArcTransition STATE transition(OPERAND operand, EVENT event) «interface» Transition STATE doTransition(OPERAND operand, STATE oldState, EVENT event, EVENTTYPE eventType) «interface» ApplicableTransition void apply(StateMachineFactory subject) ApplicableSingleOrMultipleTransition final STATE preState final EVENTTYPE eventType final Transition transition ApplicableSingleOrMultipleTransition(STATE preState, EVENTTYPE eventType, Transition transition) void apply(StateMachineFactory subject) SingleInternalArc - STATE postState; - SingleArcTransition hook; STATE doTransition(OPERAND operand, STATE oldState, EVENT event, EVENTTYPE eventType) MultipleInternalArc - Set validPostStates - MultipleArcTransition hook STATE doTransition(OPERAND operand, STATE oldState, EVENT event, EVENTTYPE eventType) TransitionsListNode final ApplicableTransition transition final TransitionsListNode next STATE doTransition(OPERAND operand, STATE oldState, EVENT event, EVENTTYPE eventType) InternalStateMachine final OPERAND operand STATE currentState final StateTransitionListener listener synchronized STATE getCurrentState() synchronized STATE doTransition(EVENTTYPE eventType, EVENT event) StateMachineFactory - final TransitionsListNode transitionsListNode - Map stateMachineTable final StateTransitionListener listener - STATE defaultInitialState - final boolean optimized StateMachineFactory addTransition(STATE preState, STATE postState, EVENTTYPE eventType, SingleArcTransition hook) StateMachineFactory addTransition(STATE preState, Set postStates, EVENTTYPE eventType, MultipleArcTransition hook) -STATE doTransition(OPERAND operand, STATE oldState, EVENTTYPE eventType, EVENT event) 事件类型 package com.donny.state;/*** author 1792998761qq.com* description* date 2023/9/27*/ public enum MyEventType {START,Change1,Change2 } 任务状态 package com.donny.state;/*** author 1792998761qq.com* description* date 2023/9/27*/ public enum MyState {NEW,State_1,State_2,FINISHED }状态机框架相关 package com.donny.state;/*** author 1792998761qq.com* description* date 2023/9/27*/ public interface SingleArcTransitionOPERAND, EVENT {public void transition(OPERAND operand, EVENT event); }package com.donny.state;/*** author 1792998761qq.com* description* date 2023/9/27*/ public interface MultipleArcTransitionOPERAND, EVENT, STATE extends EnumSTATE {public STATE transition(OPERAND operand, EVENT event); }package com.donny.state;/*** author 1792998761qq.com* description* date 2023/9/27*/ public interface ApplicableTransitionOPERAND, STATE extends EnumSTATE,EVENTTYPE extends EnumEVENTTYPE, EVENT {void apply(StateMachineFactoryOPERAND, STATE, EVENTTYPE, EVENT subject); }package com.donny.state;import java.util.HashMap; import java.util.Map;/*** author 1792998761qq.com* description* date 2023/9/27*/ public class ApplicableSingleOrMultipleTransitionOPERAND, STATE extends EnumSTATE,EVENTTYPE extends EnumEVENTTYPE, EVENT implements ApplicableTransitionOPERAND, STATE, EVENTTYPE, EVENT {final STATE preState;final EVENTTYPE eventType;final TransitionOPERAND, STATE, EVENTTYPE, EVENT transition;ApplicableSingleOrMultipleTransition(STATE preState, EVENTTYPE eventType,TransitionOPERAND, STATE, EVENTTYPE, EVENT transition) {this.preState preState;this.eventType eventType;this.transition transition;}Overridepublic void apply(StateMachineFactoryOPERAND, STATE, EVENTTYPE, EVENT subject) {MapEVENTTYPE, TransitionOPERAND, STATE, EVENTTYPE, EVENT transitionMap subject.getStateMachineTable().get(preState);if (transitionMap null) {transitionMap new HashMapEVENTTYPE,TransitionOPERAND, STATE, EVENTTYPE, EVENT();subject.getStateMachineTable().put(preState, transitionMap);}transitionMap.put(eventType, transition);} }package com.donny.state;import java.util.Set;/*** author 1792998761qq.com* description* date 2023/9/27*/ public class MultipleInternalArcOPERAND, STATE extends EnumSTATE,EVENTTYPE extends EnumEVENTTYPE, EVENT implements TransitionOPERAND, STATE, EVENTTYPE, EVENT {private SetSTATE validPostStates;private MultipleArcTransitionOPERAND, EVENT, STATE hook; // transition hookMultipleInternalArc(SetSTATE postStates,MultipleArcTransitionOPERAND, EVENT, STATE hook) {this.validPostStates postStates;this.hook hook;}Overridepublic STATE doTransition(OPERAND operand, STATE oldState,EVENT event, EVENTTYPE eventType)throws RuntimeException {STATE postState hook.transition(operand, event);if (!validPostStates.contains(postState)) {throw new RuntimeException(oldState: oldState ,eventType: eventType);}return postState;} }public class MyTransition implements SingleArcTransition {Overridepublic void transition(Object o, Object o2) {System.out.println(do transition);} }package com.donny.state;/*** author 1792998761qq.com* description* date 2023/9/27*/ public class SingleInternalArcOPERAND, STATE extends EnumSTATE,EVENTTYPE extends EnumEVENTTYPE, EVENT implements TransitionOPERAND, STATE, EVENTTYPE, EVENT {private STATE postState;private SingleArcTransitionOPERAND, EVENT hook; // transition hookSingleInternalArc(STATE postState,SingleArcTransitionOPERAND, EVENT hook) {this.postState postState;this.hook hook;}Overridepublic STATE doTransition(OPERAND operand, STATE oldState,EVENT event, EVENTTYPE eventType) {if (hook ! null) {hook.transition(operand, event);}return postState;} } package com.donny.state;/*** author 1792998761qq.com* description* date 2023/9/27*/ public interface TransitionOPERAND, STATE extends EnumSTATE,EVENTTYPE extends EnumEVENTTYPE, EVENT {STATE doTransition(OPERAND operand, STATE oldState, EVENT event, EVENTTYPE eventType); }package com.donny.state;/*** author 1792998761qq.com* description* date 2023/9/27*/ public interface StateMachineSTATE extends EnumSTATE,EVENTTYPE extends EnumEVENTTYPE, EVENT {public STATE getCurrentState();public STATE doTransition(EVENTTYPE eventType, EVENT event)throws RuntimeException; }package com.donny.state;/*** author 1792998761qq.com* description* date 2023/9/27*/ public class TransitionsListNodeOPERAND, STATE extends EnumSTATE,EVENTTYPE extends EnumEVENTTYPE, EVENT {final ApplicableTransitionOPERAND, STATE, EVENTTYPE, EVENT transition;final TransitionsListNode next;TransitionsListNode(ApplicableTransitionOPERAND, STATE, EVENTTYPE, EVENT transition,TransitionsListNode next) {this.transition transition;this.next next;} }package com.donny.state;import java.util.*;/*** author 1792998761qq.com* description* date 2023/9/27*/ public class StateMachineFactoryOPERAND, STATE extends EnumSTATE,EVENTTYPE extends EnumEVENTTYPE, EVENT {private final TransitionsListNode transitionsListNode;private MapSTATE, MapEVENTTYPE,TransitionOPERAND, STATE, EVENTTYPE, EVENT stateMachineTable;private STATE defaultInitialState;private final boolean optimized;public StateMachineFactory(STATE defaultInitialState) {this.transitionsListNode null;this.defaultInitialState defaultInitialState;this.optimized false;this.stateMachineTable null;}private StateMachineFactory(StateMachineFactoryOPERAND, STATE, EVENTTYPE, EVENT that,ApplicableTransitionOPERAND, STATE, EVENTTYPE, EVENT t) {this.defaultInitialState that.defaultInitialState;this.transitionsListNode new TransitionsListNode(t, that.transitionsListNode);this.optimized false;this.stateMachineTable null;}public StateMachineFactoryOPERAND, STATE, EVENTTYPE, EVENTinstallTopology() {return new StateMachineFactoryOPERAND, STATE, EVENTTYPE, EVENT(this, true);}private StateMachineFactory(StateMachineFactoryOPERAND, STATE, EVENTTYPE, EVENT that,boolean optimized) {this.defaultInitialState that.defaultInitialState;this.transitionsListNode that.transitionsListNode;this.optimized optimized;if (optimized) {makeStateMachineTable();} else {stateMachineTable null;}}private void makeStateMachineTable() {StackApplicableTransitionOPERAND, STATE, EVENTTYPE, EVENT stack new StackApplicableTransitionOPERAND, STATE, EVENTTYPE, EVENT();MapSTATE, MapEVENTTYPE, TransitionOPERAND, STATE, EVENTTYPE, EVENTprototype new HashMapSTATE, MapEVENTTYPE, TransitionOPERAND, STATE, EVENTTYPE, EVENT();prototype.put(defaultInitialState, null);stateMachineTable new EnumMapSTATE, MapEVENTTYPE,TransitionOPERAND, STATE, EVENTTYPE, EVENT(prototype);for (TransitionsListNode cursor transitionsListNode;cursor ! null;cursor cursor.next) {stack.push(cursor.transition);}while (!stack.isEmpty()) {stack.pop().apply(this);}}public MapSTATE, MapEVENTTYPE, TransitionOPERAND, STATE, EVENTTYPE, EVENT getStateMachineTable() {return stateMachineTable;}private STATE doTransition(OPERAND operand, STATE oldState, EVENTTYPE eventType, EVENT event)throws RuntimeException {MapEVENTTYPE, TransitionOPERAND, STATE, EVENTTYPE, EVENT transitionMap stateMachineTable.get(oldState);if (transitionMap ! null) {TransitionOPERAND, STATE, EVENTTYPE, EVENT transition transitionMap.get(eventType);if (transition ! null) {return transition.doTransition(operand, oldState, event, eventType);}}throw new RuntimeException(RuntimeException: oldState eventType);}public StateMachineFactoryOPERAND, STATE, EVENTTYPE, EVENTaddTransition(STATE preState, STATE postState,EVENTTYPE eventType,SingleArcTransitionOPERAND, EVENT hook) {return new StateMachineFactoryOPERAND, STATE, EVENTTYPE, EVENT(this, new ApplicableSingleOrMultipleTransitionOPERAND, STATE, EVENTTYPE, EVENT(preState, eventType, new SingleInternalArc(postState, hook)));}public StateMachineFactoryOPERAND, STATE, EVENTTYPE, EVENTaddTransition(STATE preState, SetSTATE postStates,EVENTTYPE eventType,MultipleArcTransitionOPERAND, EVENT, STATE hook) {return new StateMachineFactoryOPERAND, STATE, EVENTTYPE, EVENT(this,new ApplicableSingleOrMultipleTransitionOPERAND, STATE, EVENTTYPE, EVENT(preState, eventType, new MultipleInternalArc(postStates, hook)));}private synchronized void maybeMakeStateMachineTable() {if (stateMachineTable null) {makeStateMachineTable();}}private class InternalStateMachineimplements StateMachineSTATE, EVENTTYPE, EVENT {private final OPERAND operand;private STATE currentState;InternalStateMachine(OPERAND operand, STATE initialState) {this.operand operand;this.currentState initialState;if (!optimized) {maybeMakeStateMachineTable();}}Overridepublic synchronized STATE getCurrentState() {return currentState;}Overridepublic synchronized STATE doTransition(EVENTTYPE eventType, EVENT event)throws RuntimeException {STATE oldState currentState;currentState StateMachineFactory.this.doTransition(operand, currentState, eventType, event);return currentState;}}public StateMachineSTATE, EVENTTYPE, EVENT make(OPERAND operand) {return new InternalStateMachine(operand, defaultInitialState);} }package com.donny.state;/*** author 1792998761qq.com* description* date 2023/9/27*/ public class Test {private final StateMachine stateMachine;private static final StateMachineFactory stateMachineFactory new StateMachineFactory(MyState.NEW).addTransition(MyState.NEW, MyState.State_1, MyEventType.START, new MyTransition()).addTransition(MyState.State_1, MyState.State_2, MyEventType.Change1, new MyTransition()).addTransition(MyState.State_2, MyState.FINISHED, MyEventType.Change2, new MyTransition()).installTopology();public Test() {this.stateMachine stateMachineFactory.make(this);}public static void main(String[] args) {Test t new Test();System.out.println(t.stateMachine.getCurrentState());Object event new Object();t.stateMachine.doTransition(MyEventType.START, event);System.out.println(t.stateMachine.getCurrentState());t.stateMachine.doTransition(MyEventType.Change1, event);System.out.println(t.stateMachine.getCurrentState());t.stateMachine.doTransition(MyEventType.Change2, event);System.out.println(t.stateMachine.getCurrentState());} }实验结果 NEW do transition State_1 do transition State_2 do transition FINISHED
http://www.zqtcl.cn/news/615769/

相关文章:

  • 易语言编程可以做网站么网站备案流程
  • 我想接加工单seo搜索引擎优化工资
  • 西宁做网站君博推荐wordpress如何管理
  • 个人建一个网站多少钱怎样优化网络速度
  • 网站建设项目进度表长春百度seo代理
  • 购物网站排名哪家好免费做房产网站
  • 手机免费建设网站制作南通网站建设排名公司哪家好
  • 做商城网站哪里买企业官网招聘
  • 网站自己做流量互联网营销培训平台
  • 如何查看网站备案官方网站建设状况
  • 做什麽网站有前景软件 开发 公司
  • 淘宝做短视频网站好建设银行代发工资网站
  • 北京建商城网站网站做指向是什么意思
  • 定制网站开发介绍图移动网站适配
  • 青海网站建设怎么建设腾云建站官网
  • 怎样自己做企业的网站gif制作软件app
  • 阿里云建站后台网站建设多少钱合适
  • 自媒体图片素材网站景区网站怎么做的
  • 模块化网站建设江宁做网站
  • 电视网站后台管理系统漏洞淘客推广怎么做
  • 网站建设基础大纲文案丽江网站建设 莱芜
  • 程序员找工作的网站怎么给搞笑网站做文案
  • 网站flsh怎么做能被百度收录的建站网站
  • 娄底网站seo建平台网站费用
  • seo优化网站的注意事项WordPress伪静态公告404
  • 手机网站自动适应沈阳网站建设公司电话
  • 备案号网站下边苏州广告公司招聘
  • 企业网站设计模板js做网站
  • 福州最好的网站建设公司网络策划
  • 威宁做网站西部数码网站管理助手 没有d盘