APP下载

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

2016-06-30夏德宏

电脑知识与技术 2016年14期
关键词:线程程序设计协作

夏德宏

摘要:随着近年来科学技术的不断发展,互联网技术成为现代社会不可缺少的基础设施。随着网络人数的增加,并发问题也随之出现,使其成为网络发展的一个重大阻碍,如果这一问题得不到解决,网络开发将停滞不前。本文将介绍一些解决并发问题的模型。

关键词:并发;复杂性

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2016)14-0223-02

近些年,由于信息技术的高速发展,网络应用已经广泛。由于网络自身的特点,决定了网络环境的分布性,异构性,异步性,并发性及访问延误等问题,汇结到一起,就很难解决。这样对高质量的网络程序开发方面,使用传统的程序设计方法使网络开发便会碰到很多难题,尤其是并发程序的处理。并发性是造成网络程序设计复杂性的最主要因素。因此,并发性问题是目前网络程序设计中的瓶颈问题,这一问题能否的到有效的解决将成为动态网站开发中的关键性问题。

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

并发,即一齐发生。即像在单核处理器上的单程序是一样的。也就是说程序在运行过程中处理器只能同时做一件事,不能同时做两件或多件事情。并发的根源在于操作系统,动态网络程序开发过程中所涉及的并发性问题与操作系统所涉及的并发性问题基本上是一致的,其解决方法大相径庭。近些年来很多学者都在探讨和研究,如何来解决程序的并发性问题,也下足了功夫、耗费了相当大的人力和物力以及时间,也没有得到有效彻底的解决。在研究中也得出了一些能够降低并发所造成的错误性问题,但没有从根本上解决这一问题。在研究过程中所得到的一些模型驱动以及多线程模型,这两种模型各有优缺点,在不同的开发环境下也对程序造成不同的作用,所以这两种模型在不同的程序设计中的作用也是不同的,在优越性上无法比较谁更优秀。在模型的选择上,要根据存在的实质性问题选择合适的模型来进行相应的程序设计,但是在现在的开发过程中许多人都是将两者混合使用以满足现有的设计需求。

2 程序设计的驱动并发模型

现在社会上所使用的计算机结构上仍然是冯诺依曼计算机结构模型而设计的,冯诺依曼计算机结构模型有很多种,常见的只有两种。一种是基于事件的驱动并发模型,另一种是基于数据流驱动的计算机模型。二者的原理相似。基于事件的驱动并发模型是现在网络程序设计中应用最为广泛。工作时按照操作分配为两种不同的模式进行工作,从而大大提高了计算机在面多多程序并发下的数据安全性和一致性。这两种模式分别是反应式和前摄式。反应式模型也叫做非阻塞模型,前摄式模型也称为异步模型。这两种事件模型也十分相似,也可以相互转化,具体使用过程中存在相同的问题,在方法的复杂性上也类似。前者的工作原理是在数据满足条件后运行操作,后者的原理是在操作等待时完成。

基于事件的驱动并发模型中,有一很重要的组成是事件分配器,该模式就是通过事件分配器来处理事件,并对其维护状态以及函数运行时间进行处理。同时函数之间的通信问题是依靠事件完成的。事件的维护则由分配器管理完成。这一过程中待函数完成特定操作后一定要交出其控制权给事件分配器,由事件分配器来进行接下来的处理和维护工作,以达到合理的分配工作。当然,在此过程中时间内,未完成的操作可以继续进行,这一操作并不存在数据丢失,可让计算机更加完美的操作数据,这就形成了控制权的反转机制。所以说,基于事件的驱动并发模型在进行任务处理时,事件分配器非常重要,在工作过程中必须对函数进行拆分,以达到操作系统的最优化。事件在处理器的拆分过程中会导致大量的函数分裂问题,这些函数分裂会造成网络程序出现故障。增加了函数调度难度,还会造成内存泄露或程序中断。事件的驱动并发模型在调用时基于时间驱动的函数来完成的。所以事件驱动函数在工作时就要进行大量的函数分裂,来完成函数并发模型的调用工作,在此过程中会出现许多问题,有的使得函数的内部细节部分暴露出来,从而降低函数事件的安全性,从而函数的稳定性也随之降低,因此函数事件的驱动并发模型模板的复用性也就有所降低。

3 多线程程序的并发模型

多线程并发模型在线程处理方面更加灵活。对线程的调用可以分为两种一种是抢占式,一种是协作式。有些计算机系统内核对线程进行调度的管理模式属于抢占式,有些计算机内核进行调度时则是协作式。抢占式多线程操作不会受到应用程序控制,而协作式多线程操作主要是用应用层协作方式进行运行多任务线程。由于这两种线程的调度方法不同 ,致使二者表现出来的特征以及衍生的问题也存在明显的差异,因此在工作中导致计算机操作系统的运行效果也大不相同。所以在计算机选在并发模型是要根据具体的情况来进行择优选择,以达到具体的要求效果。在抢占式调度中,CPU的控制权受到调度器的控制,调度器对前面程序的执行具有十分明显的了解。这时调度器对程序进行调度属于强制调度。即调度器在进行工作时可能暂停线程的工作,进行上一线程,使得CPU的控制权强制交由另一线程进行控制,这样上一个线程可能会对当前线程造成数据接触处理。在控制不当的情况下,有可能导致数据竞争情况出现,严重会造成死锁,使程序崩溃,因此抢占式调度在许多线程同时调度时,不能达到预期效果。协作式调度对CPU的控制权比抢占式调度灵活且优越。协作式调度对CPU的控制权只有当前线程放弃数据处理时才会转交到其他线程,这样便大大降低了因资源占用而导致的系统死锁现象。可见协作式调度充分利用了处理器的并行处理机制。但在调度的实用性上,抢占式调度比协作式调度优越,比如在处理级别较高的任务时,抢占式明显比协作式占有一定优势。因此操作系统在进行选择时应该根据具体情况进行择优选择。

4 混合型并发模型

现今主流的并发处理模型有两种,程序设计的驱动并发模型和多线程的并发模型,但是这两种方法都存在优缺点。所以面对现实中存在的问题,这两种模型在并发复杂性处理方面也不能够达到预期的效果。因此经过多年的探索发现,相关人员综合了这两种并发模型的优点,建立了混合并发模型。这种思想不仅解决了当前的瓶颈问题,还大大提升了并发性模型的使用效果和使用效率。混合并发模型的通用性相比较上述两种模型的性能比较差,在具体的网络程序中不能较好的写作。因为在进行线程调度时CPU要进行合理优化,选择相应的模式,在此过程中需要消耗较多的时间,增加了整体运行时间。但基于运行时转换的混合模型就不存在上述问题,目前这项技术在实际应用中已得到证实。但是这种模型在具体的处理过程中比较复杂,而且存在处理机制的异常。但是这种模式能够很好地将抢占式和协作式进行合理调度,将两种模式的优点合二为一。从整体实际效果来看,这种模式已经让操作系统调度达到最优效果。但性能还需要进行检验,需要在实践中进行优化,以满足当前科技发展。

5 结语

网络程序中并发复杂性的分析与技术的解决,为网络的发展提供了事实依据,直接影响到网络科技的发展。网络程序设计将成为应用设计和开发的主要任务。因此网络程序设计技术在今后的一段时间内将成为重要研究内容。其中并发性问题是其核心问题所在。期待够好的解决方法来应对大数据下网络程序设计中的并发复杂性问题。

参考文献:

[1] 李慧霸.网络程序设计中的并发复杂性[J].软件学报,2011(1):22

[2] 李德毅.网络时代的软件工程.中国计算机学会通讯,2009,1:712.

猜你喜欢

线程程序设计协作
基于Visual Studio Code的C语言程序设计实践教学探索
团结协作成功易
从细节入手,谈PLC程序设计技巧
协作
浅谈linux多线程协作
高职高专院校C语言程序设计教学改革探索
协作
可与您并肩协作的UR3
PLC梯形图程序设计技巧及应用
基于上下文定界的Fork/Join并行性的并发程序可达性分析*