首页 > 其他分享 >提升应用与外部设备的交互效率-案例

提升应用与外部设备的交互效率-案例

时间:2024-06-23 15:28:54浏览次数:19  
标签:状态 外部设备 应用程序 案例 任务 测试 交互 空闲 设备

目录

概要

案例背景

较差的设计思路

改进的设计思路

小结


概要

计算机应用程序一旦与外部设备打交道,发送指令或者接收返回数据时,或多或少都会让程序员感到焦虑,因为设备特性不同,有的通过串口等标准端口传输,有的通过非标准的方式。

非标准端口传输的数据获取,完全取决于设备特性。例如,带存储的IC卡读卡器,读取数据的时间取决于容量和卡CPU性能,上层应用如何第一时间知道卡已经读完呢?再比如,自动化检测设备,测试过程从10几秒到几分钟的都有,多设备同时工作时,如何第一时间发现空闲设备呢?

上述问题有个共同点,就是多设备工作的情况下,第一时间能发现空闲设备并发出请求,进而提升设备利用率,减少等待时间。

案例背景

固定电话故障检测通常使用一种测试头,可以远程访问并启动该设备,该设备根据所提供的号线资料自动找到线路负载,通过电流电压值判断是否异常,并返回这些值和结果。测试头还可以返回“忙”状态,此时应用程序继续等待,并再次访问测试头状态,以便于获取测试头的使用权。

这里有个问题,就是对某个测试任务来说,测试头可能永远处于忙状态,因为碰巧它一直服务于其他任务,该测试任务十分“不巧”,从未捕捉到它空闲状态。

较差的设计思路

这里提供一个最初的设计方案,而且这个方案也运行了多年,运营方等用户一直在默默地忍受着。当时只有两个测试头,测试头数量少,大量的测试任务存在排队现象,但更奇怪的是,经常只有一个测试头在工作,另一个测试头始终在“偷懒”。通过了解程序,其方案如下:

  • 测试任务主动请求测试头,如果处于忙状态,则等待;
  • 一次测试正常情况约耗时30秒,程序做了计时处理,30秒请求一次;

这样的设计,难怪累的累死,闲的闲死。

改进的设计思路

  • 增加一个数据库表,隔离设备和应用程序,用于记录每个测试头的状态:空闲态、忙态;
  • 每个测试头都采用独立进程监视测试结果,一旦有了结果,立刻修改状态为空闲态(这里假设设备不会主动发送数据);
  • 应用程序不再直接访问测试头,只反复监视测试头状态表,发现空闲态,就锁定;
  • 所谓锁定,就是对空闲态的测试头,再使用一个标识表示其已经被占用,所以上一步发现空闲态后,还要判断是否被其他测试任务锁定,这里也采用了锁机制。

小结

改进后,测试头空闲会被立刻发现;两个测试头满负荷运行,再没有偷懒的情况发生。

缺点:增加了状态表和锁机制,需要保证服务器用不异常断电,否则测试头锁处于假的空闲态和假锁定,需要人工恢复才能使用。

标签:状态,外部设备,应用程序,案例,任务,测试,交互,空闲,设备
From: https://blog.csdn.net/workflower/article/details/139892733

相关文章

  • OpenCL中的SVM使用案例
    SVM(共享虚拟内存)是为了解决向显卡传输数据中包含指针的问题。此时仅用cl::Buffer拷贝数据是不够的,因为数据中的指针会因为拷贝变成野指针。这就需要SVM的帮助,它可以保证数据中的指针到达GPU后仍然可以使用。这里给出一个计算单向链表中数字的和的例子。代码运行环境是VS2017,OpenCL......
  • JAVA【案例5-2】模拟默认密码自动生成
    【模拟默认密码自动生成】1、案例描述本案例要求编写一个程序,模拟默认密码的自动生成策略,手动输入用户名,根据用户名自动生成默认密码。在生成密码时,将用户名反转即为默认的密码。2、案例目的(1)学会分析“模拟默认密码的生成”案例的实现思路(2)根据思路完成“模拟默认密码的......
  • Kimichat使用案例026:AI翻译英语PDF文档的3种方法
    文章目录一、介绍二、腾讯交互翻译TranSmarthttps://transmart.qq.com/三、沉浸式翻译三、谷歌网页翻译一、介绍短的文章,直接丢进kimichat、ChatGPT里面很快就可以翻译完成,而且效果很佳。但是,很长的PDF文档整篇需要翻译,怎么办呢?二、腾讯交互翻译TranSmartht......
  • Python中的交互式GUI开发:与MATLAB uicontrol的比较
    Python中的交互式GUI开发Python中的交互式GUI开发:与MATLABuicontrol的比较**PythonGUI开发库****Tkinter****PyQt/PySide****与MATLAB的比较****总结**Python中的交互式GUI开发:与MATLABuicontrol的比较在MATLAB中,uicontrol是一个强大的功能,用于创建用户界面控......
  • 大数据运维学习笔记之filebeat+kafka+MM1跨机房实时日志传输案例——筑梦之路
    日志数据量:日均30亿  ......
  • VMware Workstation环境下,用作测试的客户端,ubuntu安装体验案例
    需求说明:作为学习者,为了学习网络技术,网络操作系统管理技术,学习者首先需要有台计算机,其次需要在自己的计算机安装学习要用到的网络操作系统、模拟软件等。但由于计算机上一般使用的是Windows10或Windows7桌面操作系统,而且或多或少有一些重要的数据、软件存放在硬盘里。那么......
  • 538个代码示例!麻省理工教授的Python程序设计+人工智能案例实践
    Python简单易学,且提供了丰富的第三方库,可以用较少的代码完成较多的工作,使开发者能够专注于如何解决问题而只花较少的时间去考虑如何编程。此外,Python还具有免费开源、跨平台、面向对象、胶水语言等优点,在系统编程、图形界面开发、科学计算、Web开发、数据分析、人工智能等方面......
  • 【设计文档】软件详细设计说明书案例文档(word直接套用)
    一、关于本文档(一)编写目的(二)预期读者二、项目概要(一)建设背景(二)建设目标(三)建设内容三、总体设计(一)需求规定(二)设计原则1.先进性2.实用性3.规范性4.安全性5.可维护性6.可扩展性(三)平台设计思路1.全面对象化和组件化2.良好的系统架......
  • three.js 第九节 - 光线投射实现3d物体交互事件
    这个程序的效果是,创建3个球,位置分别在-4,0,4的位置,并且,点击哪个球,哪个球的颜色就变成红色//@ts-nocheck//引入three.jsimport*asTHREEfrom'three'//导入轨道控制器import{OrbitControls}from'three/examples/jsm/controls/OrbitControls'//#regionconst......
  • [本科项目实训] 行动模拟实现 与 FastAPI 对应交互-V0
    to2024/06/01行动模拟该项目拟通过大语言模型分析拆解人类描述的任务,自动的调用行动库进行执行并完成内容的汇报。因而需要针对任务对大模型进行微调(比如本项目使用的p-tuningv2),行动模拟即针对微调结果将大模型与行动库进行对接,模拟实际场景下的函数输入输出。第一步,即加......