本站小编为你精心准备了多线程对数据通信的重要性参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。
作者:李毅程运李秉智单位:四川省邮电管理局成都重庆邮电学院计算机系
在设计数据通信软件系统的过程中,由于硬件需要与远程设备进行通信,因此从在通信信道的一端发出命令开始,到收方从通信信道的另一端返回的最终响应为止,必然会出现一个时间上的延迟。
由于时间延迟,如我们仍按以往的习惯实现系统,程序中必然有图1所示的类似的一个循环。数据通信软件系统。按以往的习惯实现必然包含有类似的一个小程序,它接受用户的输入进行处理并产生输出结果。户的输入而被挂起,也即程序将无限期地等待下去,直到用户提供了输入为止。一旦用户提供输入就会得到处理,并产生相应的输出,系统仍旧返回去等待新的输入。
而作为实现数据链路层的一部分,要求软件在设计上应该能够相应地进行延时等待,如按以往的习惯实现的通信系统,整个软件实际上是按一种同步格式进行工作的,同步循环的产生极大地影响了通信系统的性能。如何解决这个问题?为此我们必须重新选择编程模型,用一个更为恰当的术语——多线程技术,以适应数据通信系统实际需要。
1多线程技术模型的适用场合
假如有一个系统,它的功能上等同于一个同步系统,但是在设计上,程序不应无限期地去等待用户输入。在设计上必须考虑下列内容:
有一个主程序循环等待用户输入的发生,但这个循环并不是专门为等待某个输入数据;
提供一个处理用户输入的模块;
提供一套机制,使得当发生用户输入时,主程序循环能及时通知处理输入的模块。凡是复合上述条件的,均可用多线程技术编程的思想加以解决。图2所示的为一个多线程技术模型。主循环负责从用户界面接收用户输入事件,并负责通知需要处理这个事件的相应模块。
这种系统之所以被称为多线程技术,是因为程序中存在着多个线程(图中的虚线)。主循环当(且仅当)发生用户输入时才作出响应,并负责通知适当的输入处理模块。整个系统是按照多线程技术的用户输入这一实质来进行设计的。
从图2中我们看到,即使其中的一个用户从不响应,则系统也能够处理另一个用户的输入。经过上述转变,主程序循环可以完全负责调度管理,这其中包括了优先级和数据冲突方面的内容。按照模块化风格来进行设计,增加额外的用户时主程序循环就不必发生变化,只需要复制一个用户界面模块和一个输入处理模块。在了解了软件系统中的同步和多线程技术操作不同特点后,我们接下来探讨,本系统的数据通信设计应该用什么模型进行,选用同步模型编程还是多线程技术模型编程?
2数据通信和多线程技术系统
我们知道在OSI栈式结构的一组协议中,最低层的是物理层,它负责实际的数据传输;而顶层的是一些应用层,负责与用户接口。在本地计算机上的物理层负责把数据传送到通信链路另一端的对等层上。传送完数据之后,物理层应该处于一种等待状态,等待接收从上面的数据链路层发来的命令,或是从对等层传来的数据。物理层不能因为服务于这两个实体中的一个而拒绝另一个。因此在本质上说,物理层是工作于多线程技术模式下。图3中说明这种操作对于任何层来说都是适用的。给定的任何一层N,在任何一个时刻,都应该能接收来自上层或下层的命令/响应。尽可能不要在为某一层提供服务的同时而把另一层排斥在外。我们的系统也应该按照这种方式进行设计,使其能很好地满足这些要求。
3多线程技术系统的数据通信设计
通过上述探讨,我们已经了解,本数据通信的设计其本质上也是多线程技术模型。为详细说明有关多线程技术系统的设计框架,下面以一数据通信系统为例,并深入阐述其多线程技术模式编程的框架。
3.1数据通信系统中多线程技术编程要素
我们在数据通信系统中多线程技术编程时所掌握的要素如下:
主循环——通常也叫做主事件循环,因为它负责接收和传送事件.这个模块同时还肩负着调度的功能;
为主循环产生事件的模块,或者说是以某种方式向主循环通知事件;
接收通知的模块,主事件循环通知它所发生的事件。这个模块可以称为“数据处理器”;
一种使主事件循环能够知道所有它需要监视的事件的机制。这样,每个EVENTHANDLER就可以分别通知主事件循环,它需要哪些事件。图4中显示了一个多线程技术编程的模型,整个多线程技术编程的框架模型可以看成由一个主事件循环、OS事件发生器、事件处理器、回调和事件注册机制构成的。
3.2线程技术编程框架设计
这里我们着重介绍一组类的设计,这组类构成此数据通信多线程技术模式编程的框架如下。
scheduler——该类实现了主事件循环。事件处理程序要向scheduler声明它们的存在,以及它们所要监视的事件;而反过来,scheduler在事件发生时要通知事件处理程序。
eventHandler——这是我们系统中所有事件处理程序的基类eventHandler有一个通用的接口SetEven(),这使得scheduler可以知道每个给定的eventHandler实例所监视的是什么事件。接口中还提供了通用的回调函数CheckEven()和Event-Callback(),对scheduler所报告的各种事件进行必要的处理。
inputHandler——这是eventHandler类的一个子类,它提供对文件上输入的各种处理功能。从这个类可以继承派生出其他的类,并重写函数EventCallback()当给定文件上的输入就绪时执行某种特定的操作。
timerHandler---这是eventHandler类的一个子类,它提供对定时器的各种处理功能。从这个类可以继续派生出其他的类,并重写函数Event-Callback(),对发生超时的定时器的定时器采取特定的操作。各类主要操作如下。
SetInput(),属于inputHandler,这个函数接受一个指向fd-set结构的指针,把代表它的文件描述符的那一位,置1.
SetTimeout(),属于timerHandler,这个函数接受一个指向timeval结构的指针,并设置该定时器在超时前所需的时间。
InputReadCallback(),属于inputHandler,这个函数对输入进行处理。
CheckInput(),属于inputHandler,这个函数接受一个指向由select返回的指向fd_set结构的指针,并检查它的文件描述符上是否有数据准备好输入。它调用InputReadyCallback()取处理所有的输入。
TimeoutCallback(),属于timerHandler,这个函数对超时进行处理。
CheckTimeout(),属于timerHandler,这个函数对比传递给它的timeval结构中的当前时间的值,并确定是否已经超时,如果已经超时,它就调用TimeoutCallback.用多线程技术编程模型设计的此数据通信类定义如下,此类的层次结构和相互关系如图5所示。(如UNIX环境等),辅以人工编码,经过编译、测试就可获得一实用系统。这样设计出的配置管理系统,由于采用了先进的国际标准,保证了本系统与其它采用相同标准系统的互连和互操作。系统模型设计采用了功能实体设计,这样便于实现和维护。
4结束语
电信管理网原理解决了电信网管理所面临的难题,它把网络的管理与业务和事务的管理统一起来,运用功能实体化和接口标准化的方法,适应了网络技术的发展和技术先进的电信网的需要。用电信管理网原理管理各种电信网是发展趋势,本文只是从管理功能角度对电信管理网原理的应用进行分析与设计。但本系统只是从管理功能的角度将电信管理网的概念和标准应用于通信网的一个尝试,还有许多问题值得探讨。