多线程技术在VB.NET中的实现

时间:2022-05-01 07:56:55

多线程技术在VB.NET中的实现

摘 要:多线程技术在现代程序设计中得到广泛采用,可更有效的利用系统资源,增强程序运行的并发性并提高应用程序运行效率。基于微软的.NET框架的提供了对多线程技术的支持。本文简述了多线程的相关概念及优势,介绍了对多线程技术的支持,探讨了多线程技术在中的实现方法,最后对全文进行了总结。

关键词:进程;多线程;.NET框架;

中图分类号:TP311.1

应用程序开发过程中处理并发问题以及多任务管理的问题经常使用多线程编程技术这一程序设计中广泛应用的技术,这一技术是这类问题最简便的解决方案。当应用程序需要多个操作同时运行时,多线程技术可以一个线程在接收键盘输入数据的同时另一个线程计算并进行数据传输,而其它的线程可以同时完成屏幕的刷新显示或从外部设备读入数据等任务。通过CLR(Common Language Runtime)提供了对多线程机制的支持。

1 多线程技术的相关概念及优势

1.1 关于进程、线程和多线程概念的理解

进程指的是应用程序的一个具体运行实例,可以认为是程序处于某一次动态执行状态。我们认为操作系统中拥有系统资源的基本单位和独立调度、分派任务的基本单位是进程。线程则是进程内部的一个执行单元或异步代码路径,每个进程可以包含若干个线程。线程是比进程更小的独立运行的基本单位,引入线程的目的是为了减少程序并发执行时的所付出的开销,使操作系统具有更好的并发性。线程只占用一些运行中必不可少的资源(程序计数器、一些寄存器和栈),除此之外不占用其它资源,但是同一进程中的线程可与其他线程共享分配给进程的系统资源,例如分配给进程的虚拟内存空间和其它的系统资源,且同一进程中的线程可以并发执行,线程的并发执行实质上是多个线程以轮流占用时间片的方式共享处理器时间。如果一个应用程序同时包含多个线程时,则称该应用程序使用了多线程技术。

1.2 多线程机制在软件开发中的优势

多线程机制的主要优势表现在提高了处理器处理时间的利用率,能够以更快的速度对用户的需求进行响应,从而提高了应用程序中进程的整体执行效率,并且增强了应用程序的适应性。多线程技术处理一个交互应用程序的时候,当线程的一部分被阻塞的时候,该应用程序还能继续运行,因此对用户增强了响应能力。多线程技术可以让程序中占用大量处理时间的任务或当前没有进行处理的任务定期将处理时间让给别的任务;可以随时停止任务;可以设置每个任务的优先级以优化程序性能。

多线程技术在软件开发的广泛应用正是基于上述优势。例如,当程序需要进行费时的I/O操作时;分布式应用环境下,更多的用户可以通过线程方式分享服务器上的处理器资源以提升扩展性;OA应用程序也可以通过多线程中处理后台操作以提升处理效率。

2 对多线程技术的支持

网络应用程序一般情况下均是多任务并发运行环境,要求很高的运行效率,而这正是多线程技术的优势所在。基于.NET Framework,而NET Framework框架的重要组成部分CLR(通用语言运行时)实现了多线程机制,从而包含了对多线程技术的支持。可以使用System命名空间下的Threading类在程序中创建多个线程、对线程进行管理并且支持线程池等增强功能的实现。,VC#.NET等.NET Framework框架下的语言编在开发多线程应用程序的过程中,均可以使用Threading类的方法和属性,不用像VB6.0那样再去非常麻烦的调用Win32 API函数,使得开发过程更为简化并且有效减少了各种错误的产生。

3 多线程编程在中的实现

3.1 线程的创建和控制

中线程的创建和控制主要通过.NET基础类库中System.命名空间的Thread类进行实现,Thread类用于创建线程并对线程进行控制操作,并可以获取和设置线程的优先级和当前状态。

对一个线程进行创建和控制操作的大致步骤是首先引入Thread类所属的命名空间:Imports System.Threading,接着创建一个Thread类的对象,并且通过AddressOf子句传送委托给需要调用的具体过程,然后启动运行线程。进行线程创建操作后,可以使用Thread类的Start方法启动线程运行,使用Suspend和Resume方法将线程挂起或将挂起的线程恢复运行,此外Thread类还提供了Interrupt、Sleep、Abort及Join等多种方法以控制操作线程。Thread类还具有Name、IsAlive、PriorityIsBackground和ThreadState等重要属性,通过这些属性可以获取或更改当前线程的状态。

3.2 线程生命周期中的状态转换及线程优先级设置

线程在整个生命周期中处于不同的状态,Thread类的ThreadState属性决定了线程的状态。初始创建线程时,线程处于Unstarted状态,使用Thread类的Start()方法可将线程状态转换为Running状态。Running状态下调用Suspend()方法将线程状态转换为Suspended状态,直到调用resume()方法使线程重新运行而处于Running状态。如果调用Thread.Abort()方法,线程将停止运行并处于处于Stopped状态。

线程的优先级指的是线程对处理器时间的优先占用权。通常情况下线程轮流占用处理器时间片,但当高优先级的线程与低优先级的线程并发执行时,操作系统优先将处理器时间片分配给高优先级的线程。通过Thread类的Priority属性可以设置线程所具有的优先级,Priority属性值为枚举类型ThreadPriority。

3.3 线程间的同步问题

线程同步问题是指多个线程之间相互占用对方资源导致各线程的任务无法继续执行的问题,例如多个线程同时访问同一对象,或者多个线程运行同一段程序代码,这些情况下各个线程均处于阻塞状态。

为了避免这一问题的产生,需要通过某种方法进行线程间的同步。一种同步方法是可以使用中的Synclock语句块,将多个线程可能同时访问的对象或同时执行的程序代码段放入Synclock语句块,使的线程可以得到对象引用的独占锁,从而避免多个线程同时访问同一对象,或者多个线程运行同一段程序代码。在SyncLock语句中要得到某一对象引用的独占锁,一般通过调用GetType方法获取与所有类相关联的System.Type对象实现。另一种同步方法是调用Thread类的Join()方法使得调用该方法的线程处于指定时间的阻塞状态,直到其它的线程执行完毕,通过判断Join()方法的返回值可以判断出其它的线程在指定时间内是否已经执行完毕,返回值为True表明已经执行完毕,返回值为False表明尚未执行完毕,通过这种方式来实现线程同步。

4 结束语

多线程技术是提升应用程序执行效率,进一步增强程序并发性,充分利用系统资源的一种重要手段,也是目前编程技术的核心思想之一。使用的多线程技术进行应用程序开发,可以有效的提高应用程序开发效率并且大大缩短程序响应时间,而且能够对系统资源进行更加有效的利用。

参考文献:

[1]程伟,肖文敏.Visual 的多线程机制[J].电脑开发与应用,2007(11).

[2]张焰林.基于的多线程技术应用[J].计算机系统应用,2009(02).

作者简介:陈俊伟(1976-),男,重庆铜梁人,教师,讲师,硕士,研究方向:软件技术,计算机网络。

作者单位:重庆电子工程职业学院,重庆 400700

上一篇:土钉墙高边坡支护技术探讨 下一篇:基于MIH的异构无线网络切换优化研究