Linux网络编程:状态机
Linux网络编程:状态机
- 状态机基本概念介绍
- 状态机的特征
- 状态机的要素
- 注意!
- 为什么在网络编程中需要状态机?
状态机基本概念介绍
首先我们简单的介绍一下状态机的基本概念
有限状态机是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。
说人话就是在一个时刻内,只会存在一种状态,但是达到触发条件,就会切换状态。
状态机的特征
- 状态总数是有限的
- 任一时刻,只处在一种状态之中
- 某种条件触发后,会从一种状态转变到另一种状态
- 事物状态变化是有规则的,A状态可以变换到B,B可以变换到C,A却不一定能变换到C
- 同一种行为,可以将事物从多种状态变成同种状态,但是不能从同种状态变成多种状态
状态机的要素
状态机可归纳为4个要素,即现态、条件、动作、次态。“现态”和“条件”是因,“动作”和“次态”是果。详解如下:
- 现态:是指当前所处的状态。
- 条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。
- 动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。
- 次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。
注意!
- 避免把某个“程序动作”当作是一种“状态”来处理
那么如何区分“动作”和“状态”?“动作”是不稳定的,即使没有条件的触发,“动作”一旦执行完毕就结束了;而“状态”是相对稳定的,如果没有外部条件的触发,一个状态会一直持续下去。 - 状态划分时漏掉一些状态,导致跳转逻辑不完整
所以维护上述一张状态表就非常必要,而且有意义了。从表中可以直观看出那些状态直接存在跳转路径,那些状态直接不存在。如果不存在,就把对应的单元格置灰。 每次写代码之前先把表格填写好,并且对置灰的部分重点review,看看是否有“漏态”,然后才是写代码。
为什么在网络编程中需要状态机?
因为写出大量的if else使得代码无比丑且高冗余
Linux网络编程:状态机相关推荐
- 计算机网络(二)Linux网络编程
layout: post title: 计算机网络(二)Linux网络编程 description: 计算机网络(二)Linux网络编程 tag: 计算机网络 文章目录 资源共享 Linux高性能服务 ...
- 【Linux网络编程】Nginx -- 模块开发(upstream / subrequest)
[Linux网络编程]Nginx -- 模块开发(upstream / subrequest) [1]upstream VS subrequest 简介 upstream 为访问上游服务器,它把Ngi ...
- Linux网络编程--进程间通信(一)
进程间通信简介(摘自<Linux网络编程>p85) AT&T 在 UNIX System V 中引入了几种新的进程通讯方式,即消息队列( MessageQueues),信号量( s ...
- Linux io模型及函数调用,Linux 网络编程的5种IO模型:信号驱动IO模型
Linux 网络编程的5种IO模型:信号驱动IO模型 背景 这一讲我们来看 信号驱动IO 模型. 介绍 情景引入: 在信号驱动IO模型中,当用户线程发起一个IO请求操作,会给对应的socket注册一个 ...
- Linux网络编程实例分析
最近由于工作原因需要温习一下Linux网络编程的部分基础知识,因此对之前写的Socket网络通信的代码进行了进一步优化和拓展,在不关闭一次Socket连接的基础上,对服务端加入循环读写的功能,同时加入 ...
- Linux网络编程必看书籍推荐
首先要说讲述计算机网络和TCP/IP的书很多. 先要学习网络知识才谈得上编程 讲述计算机网络的最经典的当属Andrew S.Tanenbaum的<计算机网络>第五版,这本书难易适中. &l ...
- [Linux网络编程学习笔记]套接字地址结构
好久没有看那Linux网络编程这本书了,今天看到了重点部分-TCP套接字.下面先来看看套接字的地址结构 Linux系统的套接字可以支持多种协议,每种不同的协议都是用不同的地址结构.在头文件<li ...
- linux网络编程二:基础socket, bind, listen, accept, connect
linux网络编程二:基础socket, bind, listen, accept, connect 1. 创建socket #include <sys/types.h> #inc ...
- linux网络编程常用函数详解与实例(socket--bind--listen--accept)
常用的网络命令: netstat 命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可 ...
- 基于UDP客户端服务器的编程模型-linux网络编程
坚持在代码中注释,边读代码边学习Linux网络编程 使用到的发送函数原型: #include <sys/types.h>#include <sys/socket.h>ssize ...
最新文章
- security面试_精选41 道 Spring Boot 面试题,附答案!
- 【深度学习】深入浅出神经网络框架的模型元件(常用层和卷积层)
- 月份java题_Java基础50道经典练习题(14)——求日期
- 【HDOJ】1150 Machine Schedule
- jsr303 spring_使用Spring和JSR 303进行方法参数验证
- 如何在邮件系统中使用自己的域名?
- Socket通信客户端设计(Java)
- [日常] 算法-单链表的创建-尾插法
- Windows输入体验是什么,Windows11输入体验在哪里
- 完整的企业机房设计(上)
- 晶振PCB layout注意事项
- 104键键盘 按键码表
- (Cys-RGD)包被CdTe量子|3-巯基丙酸(MPA)包被近红外发光CdTe量子
- java float 判断整数_判断一个数是否是整数
- NBA篮球运动员大数据分析决策支持系统
- Java,php,运维工程师转型大数据开发怎么样?你属于哪一类?
- 微信小程序二手汽车拍卖系统丨可以android studio运行
- springBoot+thymeleaf框架实现cms内容管理和商城系统
- vue html 格式化,解决在写Vue时,格式化代码 属性自动换行的问题
- [内核安全4]内核态Rootkit之IDT Hook