多线程是近年来十分盛行的一项编程技能。尤其是在网络传输和资源同享软件的规划中,在多媒体的收集和处理、并行计算、并行处理等方面,更是因为高效性和牢靠性要求而使线程技能得到广泛运用。多线程技能确保了程序模块间的别离度,并且可经过合理区别功用模块而削减通讯量,完结广泛的数据同享,然后使体系功用得到很大进步。
可是,跟着线程数意图增多,同享数据的办理将变得适当杂乱。线程的增多导致对同享数据区的拜访十分频频,然后增加了体系的额定开支。为此,本文提出了依据线程分组的亚线程机制。
在规划中,只需分组合理,亚线程之间的调用就不会过于频频,然后可削减多个线程频频拜访同享数据而引起的紊乱。由此,亚线程机制能够有用地进步体系功用,一起确保数据的安全。
1、亚线程机制的规划思维
1.1 亚线程和亚线程树
亚线程在结构上是依据线程的分组。每个亚线程由必定数意图线程和同享数据组成。编程时,把彼此之间有严密联络或存在频频通讯联络的线程及同享数据分到同一个亚线程中。亚线程内部的彼此调用和通讯几乎不受约束,只要亚线程之间的拜访会遭到必定约束。
一般说,线程是被单个创立的。在亚线程机制中,每个线程被分到某个亚线程中,一旦确认,便不再改动。
总归,亚线程可分为根亚线程和一般亚线程两类。最基本的亚线程叫根亚线程。若创立线程时不指定亚线程,该线程就会主动归归于根亚线程。除了根亚线程之外的亚线程都是一般亚线程。
在亚线程机制中,选用亚线程树来完结总体规划。亚线程树是程序中一切亚线程构成的树形结构。在这种树形结构中,一个亚线程一般从归于其它亚线程。所以,在构建一个新的亚线程时,有必要指定它从归于哪个亚线程。若未指定,则会主动归归于根亚线程。这样,一个应用程序中的一切亚线程终究都会直接或直接归归于根亚线程。亚线程树结构如图1所示。
在选用进程-线程结构的应用程序中,亚线程是介于进程和线程之间的中心结构。试验标明,因为亚线程的参加,使体系功率得到很大进步。
1.2亚线程机制的详细实例
在本课题组完结的863项目《长途机器人操控体系》中选用了进程-线程结构,在此基础上参加了亚线程后,构成进程-亚线程-线程机制。
此体系首要功用是:经过图画传输和指令传输,对长途机器人进行相应操控,并经过加密技能完结对信息的即时加密。体系选用Client/Server结构。表1和表2分别为Server端和Client端的线程和亚线程列表。
表1 Server端的线程和亚线程列表
表2 Client端的线程和亚线程列表
在Server端,亚线程树结构如图2所示。其间,图画收集、图画紧缩和图画传送三个线程的处理目标都是视频文件;指令接纳和指令履行两个线程的处理目标都是指令;文件加密线程和文件解密线程的处理目标都是文件;文字发送线程和文字接纳线程则担任文字通讯。依据上述特色,这些线程构成了图2所示的亚线程树结构。
在Client端,程序运转后,每衔接一个机器人站点就树立一个进程。每个进程中的亚线程结构如图3所示。各亚线程的构建办法与Server端相似。
参加亚线程机制后,亚线程间的数据拜访遭到约束。例如文字发送、接纳线程和S/C同步线程基本不拜访加密解密的文件,亚线程办理器乃至能够制止这些线程去拜访传输的文件。又如,对传输的视频数据,除了Server端的图画收集、紧缩和传送线程,以及Client端的图画接纳、解紧缩和显现线程外,不能被其他任何线程拜访。这样,经过亚线程机制优化了整个应用程序的运转,并确保了数据的安全。此外,因为首要操作都归为亚线程内部操作,所以,大大进步了程序履行的功率。
1.3 亚线程机制的特色
亚线程机制的特色是,答应对一个亚线程中的一切线程一起操作。例如,可经过调用相应的办法来设置其间一切线程的优先级,也能够发动或堵塞一切线程。
亚线程机制的另一重要特色是为安全性供给了很好条件。它经过分组来区别不同安全等级的线程,对不同亚线程中的线程进行不同处理,还能够经过亚线程的分层结构来支撑不对等安全措施。在亚线程机制中,一个线程只能修正所属亚线程树中的其它线程,这种修正包括修正线程优先等级和挂起或唤醒线程等操作。
因为一个亚线程只能拜访那些从自己的根亚线程树分支出来的线程,而不能拜访其他任何线程。因而,可有用确保数据的安全。
2、动态亚线程树的运转机制
动态亚线程树是对亚线程机制的进一步优化,它经过在亚线程结构基础上参加亚线程办理器和动态亚线程机制来完结。
2.1亚线程办理器
亚线程办理器的功用是对亚线程进行调控,它独立于一切亚线程。
详细设计时,亚线程办理器由一个表格和一个操控组件构成。表格纪录各种信息,详细内容随应用程序不同而异。例如,包括亚线程间的交互信息,整个体系中包括的线程和亚线程名,各线程和亚线程对应的父亚线程名,线程及亚线程之间的通讯次数和频率等。操控组件则依据这些信息做出相应的调整。
2.2动态亚线程机制
大多数情况下,在线程的整个生命周期中,基本功用、通讯目标以及处理目标都较固定,因而,亚线程机制能够有用地优化应用程序的履行功率。但有时有些线程的通讯目标不固定,处理的目标也不固定。假如将这样的线程永久归入某一个亚线程,就会下降程序的履行功率。
动态亚线程机制能够较好地处理这个问题。动态亚线程机制的中心是能够动态地调整亚线程树的内部结构。选用这种机制后,一个线程调用其它亚线程中的目标或许与其他亚线程通讯后,相关线程的标识符和通讯次数会被根亚线程办理器纪录下来。若尔后屡次产生相似的通讯,亚线程办理器就会据此对亚线程树进行调整,将该线程归入联络最多的亚线程中。别的,假如两个亚线程之间呈现频频通讯,那么亚线程办理器会经过评测和判别来兼并两个亚线程。
图4是选用动态亚线程机制时,亚线程树调整结构的简略示例。从图4中能够看到,亚线程办理器计算成果中,线程6和亚线程1中的线程通讯为20+15+17=42次,远远大于与亚线程2内部的通讯。这种情况下,亚线程办理器经过评测组织会得出应该调整结构的判别,所以将线程6归入亚线程1中。
详细说,亚线程的调整有以下几种类型:
①一段时间内,T1不归于Y2,但线程T1和亚线程Y2的通讯显着比较频频,这种情况下,T1应归入Y2。
② 一段时间内,线程T1与多个亚线程的通讯都很频频,这种情况下应将线程T1复制到那些亚线程中,即在相应的亚线程中从头创立与T1相同的线程,并进行相应规划。
③ 一段时间内,两个亚线程Y1和Y2的彼此通讯十分频频,则将两个亚线程进行兼并。
跟着多线程的广泛应用,越来越需求有一种合理的办理机制来办理多线程避免形成调度的紊乱。
亚线程机制能够有用地办理应用程序内部多个线程之间的彼此拜访和调度。对应的树状结构确保了数据拜访和信息交互的安全。经过动态调整亚线程内部结构以及整个亚线程树的树状结构,又能够动态优化多线程应用程序的全体功用。
责任编辑:gt