浅谈网络系统设计复杂性

时间:2022-01-02 05:07:14

浅谈网络系统设计复杂性

摘要:在网络系统程序的开发设计过程中,并发性和复杂性所造成的影响十分巨大,它们严重降低了网络程序的开发效率,延长了设计时间。本文通过对网络程序并发性与复杂性的原因进行分析,提出了事件驱动并发模型、多线程并发模型、混合性并发模型三大解决方法,为相关的互联网研究提供一定的参考。

关键词:网络程序;并发性;复杂性

近年来,传统的程序开发设计方法在高质量网络程序开发中暴露出了许多的问题,而造成这些问题的关键因素就是网络环境和单机环境之间所存在的巨大差异。在产生的这些问题中有两个问题最为突出,它们就是并发性问题和复杂性问题,其中并发性问题给网络程序的设计和发展造成了极大的麻烦。怎样处理好并发性问题所造成的困难,以及如何选择合适的并发处理模型,成为了摆在所有程序员面前的最大挑战。

一、网络程序并发性与复杂性原因分析

通常来说,造成网络程序并发性与复杂性的原因主要有三个方面。一是单机环境和网络环境之间存在过于明显的差距。由于这巨大的差距,混合性并发模型会暴露出发展时间过短和应用面过窄的缺陷,为高质量网络程序的开发增添了很多的麻烦。二是设计理念受到了限制。软件和硬件的功能限制着原先的程序设计理念,也是造成网络程序并发性与复杂性存在的重要因素,设计理念的限制,也严重降低了整个网络程序设计过程的效率。一般来说,网络程序的并发性会以异构性、异步性、访问延误和分布性体现出来。三是驱动模式有待优化。在实际的工作中,根据具体的语义类别,网络并发任务的处理办法可以分成反应式和前摄式。以反应式模型为例,相应事件发出通知后,应用程序要先对通知进行接收,然后在这一基础上根据具体发生的情况,针对性的发出相关的操作指令,整个过程中由操作结果所引发的错误会以函数返回值的形式体现出来,通过观察函数返回值,工作人员便可获知错误的具体情况。在事件完成的整个流程中,这些错误情况会以参数的形式参与和传递到各个相关的内部程序中。当需要同时发出很多个并发操作指令的时候,则应先对整体程序添加一个标识参数,然后再发出相应操作指令,这样就能更细致的区分不同类型的并发操作。

二、网络程序并发性与复杂性解决方法

(一)事件驱动并发模型。事件驱动并发模型已经广泛应用在开发和设计网络程序的工作当中。通常按照实际工作情况和具体的语义类别将事件驱动并发模型分成两种,第一种是反应式,第二种是前摄式。在第一种模型中,计算机的应用程序要先对事件发出的通知进行接收,然后根据具体事件发出有针对性的操作指令,在过程中若是出现操作结果的错误,函数的返回值会将错误反应出来。在第二种模型中,计算机的应用程序会先发送出具体的操作指令,等相应事件结束之后,操作过程中出现的错误会被当作完成整个事件的参数,并传送到对应的应用程序之中[1]。如果任务要求同时发送大量并发性操作,则需要先对整体程序添加一个标识参数,然后再发出相应操作指令,这样就能轻松对不同种类的并发操作加以区分。对于事件驱动任务关系的处理问题,程序员们可以使用位于最底层的事件分配器,这时工作人员必须先拆分相关函数,如果拆分的过程中出现失误或错误,则会使函数大量分裂,这会加大网络程序的调整难度,从而造成计算机大量泄漏出内部所存储的信息,如图1所示。为了避免函数大量分裂这一状况的出现,程序员们可以使用profile开发信息的方式来优化调试过程,从而使程序的整体性能得到大幅的提升。(二)多线程并发模型。多线程并发模型可分为抢占式与协作式两种,下文对这两种调度方式分别展开详细的研究和分析。抢占式线程调度,指的是计算机的内核控制和管理线程的方式,线程的工作状况同应用层对其的控制状况没有任何关联。抢占式线程调度中的调度器严格把控CPU的控制权,会根据前一线程运行的具体情况加强调度,也就是说,可能在某个不应该暂停线程工作的时刻,调度器会强制将CPU控制权转交给另一个线程,这样会让前一个线程在运行过程中无法满足当前线程的个性化需求,最终发生计算机的网络系统彻底崩溃的问题。协作式线程调度,指的是所有应用层共同合作来让线程处于工作状态的方式。这种类型的调度方式对于CPU的掌控程度要高于抢占式调度,只有在线程停止数据处理的时候,其他线程才能得到CPU的使用掌控权。但是在进行高实时性的任务处理时,选择抢占式线程调度要好于协作式,因为协作式线程调度的实用性相对较低。通常情况下,线程调度器都位于计算机的内核里面,所以必须经过系统内核的调用才能对线程进行有效操作,这样在处理复杂性和并发性较高的任务时,会花费更多时间,其性能的发挥还会被复杂的调度算法所影响,而且移植线程代码是个极其困难的过程[2]。例如,Windows系统可以同时运行抢占式线程和协作式线程,可是Linux系统却只能运行抢占式线程,而在一些资源非常稀少的系统内,根本就不能进行线程的运行。(三)混合性并发模型。从以上的分析可知,在工作中上述两种模型均存在较大的局限性。因此,一些网络程序员们为了解决这个尴尬的局面,把这两个模型进行取长补短的大胆融合,开发出了新型的并发模型,即混合性并发模型,它的适用性更强,适用范围更加的广泛。在实际的工作中,混合性并发模型可以转换驱动的方式。驱动转换的方式可分成翻译时转换、运行时转换两种。翻译时转换目前有着一些尚未得到解决的问题,所以其通用性非常低,也不能和其他体系的应用程序展开合作,运行时转换的实用性则相对较强。在当前的技术条件下,能一并支持事件驱动模型和多线程模型,可是其处理问题所用的方式过于复杂。混合性并发模型还处于刚刚兴起的阶段,其发展时间并不长,实际应用也较少,相关性能仍需进一步研究和改进。

综上所述,并发性问题在网络程序的开发设计过程中是无法避免的,情况也极其复杂,以当前的技术条件,还不能将这些问题彻底地解决。因此,相关的技术人员们应以实际情况出发,结合具体的问题采用针对性的并发处理模型,不断提升自身的并发处理能力,具体事件具体解决,尽量缩小并发处理的规模,做到让网络程序的性能变得更为良好和稳定。

参考文献:

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

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

作者:刘西 单位:西南交通大学希望学院