APP下载

试论当前网络程序设计中的复杂性

2017-03-29刘儒香

赤峰学院学报·自然科学版 2017年7期
关键词:线程复杂性程序设计

刘儒香

(亳州学院 电子与信息工程系,安徽 亳州 236800)

试论当前网络程序设计中的复杂性

刘儒香

(亳州学院 电子与信息工程系,安徽 亳州 236800)

科学技术的不断发展使互联网成为了当前社会生活和经济发展不可缺少的信息基础设施.但是网络环境较为复杂,缺乏一定的安全性,基于网络环境,传统网络程序设计开发受到了前所未有的阻碍,出现了很多并发性问题,使网络程序开发效率不断降低.针对网络程序设计受到并发性问题影响的问题,本文从网络程序设计现状和并发复杂性的实质出发,对网络程序设计中的并发复杂性问题进行详细的探讨,以期为相关的研究提供相应的意见.

网络程序设计;并发复杂性;实质;模型

近年来,传统程序设计方法无法应用于当前开发高质量网络程序中,这是因为传统的单机环境与当前的网络环境存在较大的差异,这些差异体现于网络环境与单机环境之间的分布、结构、并发性以及延误等多种问题方面,一旦这些问题整体结合,网络程序设计就更加难以正常开展.并发性是阻碍网络程序设计的主要因素,由于并发处理方法影响着软件模板可组合性,进而导致网络程序设计中的部分问题难以得到正常解决.因此,网络程序设计者应该重视并发性管理,以合理的并发处理模型,尽力降低网络陈雪开发难度.

1 网络程序设计现状及网络程序并发复杂性实质

1.1 网络程序设计的现状

程序使用过程中,网络程序设计与单机程序之间存在较大的差异,由于二者之间的运行环境并不相同,这就给网络程序带来了较大的阻碍.当今时代已经进入了信息化时代,社会的发展与进步离不开网络,当前很多软件、设备都拥有网络功能,网络技术被应用于生活、生产的方方面面,同时也转变了很多工作模式.基于这样的大背景,网络程序设计得到了空前的发展,与此同时,人们生活水平的不断提高,对网络程序设计的要求也随之增高,但是传统网络程序设计方法已经无法满足当代高品质网络程序设计要求,因此,完善网络程序设计方法已经成为了网络程序工作中亟待解决的问题[1].针对此,网络程序设计者努力对网络程序设计中存在的缺陷进行不断优化和改进.但是,就是因为向着这一目标的不断努力,程序设计者逐渐发现并没有办法可以很好地解决这些并发复杂性问题,极大地阻碍了网络程序设计的发展.针对这一现状,网络程序设计应该立足于当前发展的实际情况,对单机环境与网络环境中存在的差异进行整体调整,从细节和整体上对整个网络程序设进行完善,提高网络程序模型性能,缩小并发复杂性问题的处理规模,促进网络程序设计的发展与进步.

1.2 网络程序并发复杂性实质

并发主要是指在一个时间段中,网路程序中的某几个程序同时处于已经启动运行到运行完毕的状态中,且这个程序都同时在同一个处理机上运行,在这一个整个过程中,虽然一个处理机上有多个程序运行,但是任意一个时刻点上只有一个程序在处理机上运行.具体来说,所谓“并发”,从全局的角度来看就是“串联”,这个与在单核处理器上,多线程运行于单人计算机相似.并发与并行存在很多相似的地方,但是二者在处理方法中存在实质性差异,并发复杂性处理可以针对单机程序设计中存在的并发问题进行有针对性的解决,这对于网络程序设计有重要意义.并发性问题主要存在于网络操作系统中,处理并发性问题应该根据问题的实际情况,采用合理的方法和正确观念.虽然相关的研究者针对解决并发性问题研究了很长时间,但是并未发现哪一种方法能够彻底解决并发性问题.当前的处理方法大部分都是基于事件的驱动并发模型以及多线程模型,这两种模型各有优点和缺点,且在不同的环境下,产生的作用也大不相同,因此,在本质上没有什么模型比另一个模型优质的说法,选用什么模型主要是取决于什么环境.

2 网络程序设计中的并发复杂性

2.1 事件驱动并发模型

目前的计算机大部分都是使用冯·诺依曼所设计的计算机模型,但是,这种类型的计算机模型往往都需要依靠其他信息驱动来运行,即基于事件驱动并发模型,这种计算机模型与数据流驱动的计算机模型显示.事件驱动并发模型被广泛应用于现当代的网络程序设计中,网络程序设计者还可以按照操作调配时机,分为反应模式和前摄模式[2].其中,反应模式是指在数据满足相应的条件的基础上,进行相应的操作;前摄模式则是指先进行相应的操作,然后再等待事件完成.

基于事件的驱动并发模型,在对事件的维护以及函数运行时间的处理上,基本都是通过事件分派器来进行处理,例如:函数之间的通信主要是依靠事件完成,事件维护是通过事件分配器完成.在这种模型下,函数完成了特定的操作后,将CPU控制权又交还出来,进而通过事件分派器来做进一步的处理.与此同时,该模型会立足于事件上次没有完成的进度继续跟进,这样就反转了CPU的控制权.从上述的内容来看,基于事件的驱动并发模型主要是通过事件分派器对任务关系进行处理,并对函数进行拆分,促使函数分裂.假如在事件分派器处理任务的过程中,出现问题,导致大量函数分裂,则会增加程序调试难度,并造成计算机内存泄漏.总体而言,基于事件驱动并发模型在被调用的过程中,需要进行函数分裂,主要会导致函数内部细节暴露,函数稳定性降低,进而降低基于事件驱动并发模型板块重复使用性,对计算机整体性能造成破坏.

2.2 多线程并发模型

多线程并发模型与基于事件驱动并发模型具有一定的相似性,而菏泽都可以分为两种调度类型,不同的是,多线程并发模型主要分为抢占式模型和协作式模型.所谓抢占式模型主要是指计算机系统内核调度和管理线程,这种调度类型下,应用层不会控制线程的运行.另外,协作式模型主要是指应用层以协作的方式进行任务线程运行.两种调度方法在本质上存在较大的差别,因此,二者所表现出的特征以及并发性问题也存在很大的区别,值得注意的是,二者不存在哪一个方法优质哪一个方法劣质的说法,两种调度方法各有其优点和缺点.

在抢占式调度方法中,计算机CPU控制权依靠于调度器的管理,但是,调度器知识对线程进行强制性调度,基于这种调度模式,调度器很有可能在一个不能暂停线程的时候,反而将计算机CPU的控制权强制转移到另一个线程上,这就容易造成上一个线程没有妥善处理当前线程所需要的数据,进而造成数据见的恶意竞争,情况严重还容易导致计算机程序崩溃[3].

协作式多线程调度方法与抢占式调度方法不同,协作式多线程调度方法不会出现CPU控制权的强制性转移现象,只有在当前线程放弃了CPU的控制权的情况下,CPU的控制权才会转移到其他的线程.协作式调度模型可以充分发挥处理器的并行能力,但是在协作调度方法下,实时性较差,导致在对实时性有高要求的任务中,适合采用抢占式调度方法.只是爱大多数情况下,多线程并发模型灵活性高于基于事件驱动并发模型.另外,多线程协作应用于不同的计算机系统中时,线程代码之间的移植具有较大的困难,这降低了多线程模型的适应性.例如:在Windows系统中,可以支持抢占式线程方法和协作式线程方法同时应用,但是标准的Linux中只允许抢占式线程,在某部分资源有限的计算机系统中,多线程并发模型更加不被支持.

2.3 派生并发模型

派生并发模型中期货是被应用最广泛的一种派生并发模型,期货会立刻返还一个关于任何表达式N的期货,并在同一时间并发对X的主动求值[4].求值完成后所得出的结果取代之前产生的期货,从本质上来看,期货就在产生的时候就没有确定,只有值求出后,才能处于确定状态.使用期货在很大程度上可以消除并发管理,甚至程序设计者都不用指导所使用的程序是否是期货程序,也不用知道期货是否处于确定状态,大部分并发管理的相关内容都集中于产生期货的程序中,在对问题的处理过程中,除了明确任务能不能被并发执行以外,还要根据程序多线程并发处理方式或者基于事件驱动并发方式来进行任务的处理,当任务处理完成后,期货才能够处于确定状态.从当前的多核并行计算环境来看,期货受到了更加广泛的关注,尽管期货拥有很多优点,但是因为主流程序设计语言并不支持期货,导致在实际应用中较少.总而言之期货主要来源于分布式计算,是一种适用于管理并行复杂性的有效措施之一.

2.4 混合性并发模型

基于事件驱动并发模型与多线程并发模型组处理当前网络程序设计并发复杂性问题的主要方法,这两种处理方法各有其优点和缺点,结合二者的优点所建立的新型处理方式被称作混合性并发模型.这种模型的运行原理,就是把网络程序进行形式化的转换促进驱动间能够完成良好的协作驱动.从当前的网络程序设计现状来看,已经有良好的技术基础,可以支持事件驱动和多线程、派生等多种并发模型的应用,但是在处理任务的过程中具有较大的复杂性,因此缺乏一种针对发生异常突发情况的处理机制.从从总体上来看,至今为止还没有一种全面的、系统的方法将多种模型融合起来,尽管混合性并发模型已经结合了多种模型中的优点,但是其通用性能较差,再加上混合性并发模型研发时间短,实践时间不长,还有待完善,因此在实际应用中并没有得到良好的效果.

并发复杂性问题普遍存在于网络程序设计中,且在网络信息化的大环境下,这种问题只会越来越突出,研究人员应该将其设置为网络程序设计领域中的重点研究问题.在网络信息化发展的长河中,尽管有很多研究者对并发性问题有所研究,但是仍然缺乏系统的、完善的技术应用来解决并发性复杂问题[5].利用当前的网络技术只能通过不断提高并发问题解决能力来进行网络设计的完善,而且上述并发模型都拥有较大的发展空间,加入对软件进行细致分类,缩小处理规模,这对于并发问题的解决具有较大的促进作用.

总而言之,网络程序设计的并发复杂性是一个无法避免的问题,从当前的网络技术现状来看,并没有系统有效的措施来彻底解决这一系列并发复杂性问题.因此,网络程序设计者应该从当前的实际情况出发,不断强化自身的网络程序并发处理能力,完善并发模型的性能,尽量缩小并发处理规模,充分发挥网络程序的优质性能,使网络程序设计可以正常顺利地开展.

〔1〕杨文福,王捷.网络系统设计中的程序设计并发复杂性[J].信息通信,2016,19(1):110-111.

〔2〕高伟,张学红.关于网络程序设计中的并发复杂性研究[J].网络安全技术与应用,2014,15(12):49-51.

〔3〕林赟煌.关于网络程序设计中的并发复杂性的几点思考[J].民营科技,2016,22(9):89.

〔4〕胡泳霞.基于内存模型的 Java并发编程[J].电子测试,2016,17(13):89-90.

〔5〕卢栋栋,何清法.基于多线程的并行实例恢复方法[J].计算机应用,2016,36(4):1002-1007.

TP311.10

A

1673-260X(2017)04-0028-02

2017-02-09

2015年安徽省省级计算机应用技术专业综合改革试点(2015ZY078)

猜你喜欢

线程复杂性程序设计
PFNA与DHS治疗股骨近端复杂性骨折的效果对比
简单性与复杂性的统一
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
浅谈linux多线程协作
高职高专院校C语言程序设计教学改革探索
应充分考虑医院管理的复杂性
直肠腔内超声和MRI在复杂性肛瘘诊断中的对比分析
PLC梯形图程序设计技巧及应用
Linux线程实现技术研究