VB.NET多线程技术及其实现

豆豆网   技术应用频道   2006年07月29日    社区交流

本文详细介绍VB.NET多线程技术及其实现

  Sub DoMyWork()

  Dim MyPool As System.Threading.ThreadPool ' 将一个任务排队

  MyPool.QueueUserWorkItem(New System.Threading.WaitCallback(AddressOf Task1))

  MyPool.QueueUserWorkItem(New System.Threading.WaitCallback(AddressOf Task2))

  End Sub

  如果要启动很多单独的任务,但并不需要单独设置每个线程的属性,则线程池将非常有用。每个线程都以默认的堆栈大小和优先级启动。默认情况下,每个系统处理器上最多可以运行25个线程池线程。超过该限制的其它线程会被排队,直至其它线程运行结束后它们才能开始运行。

  线程池并不是在所有的情况下都适用,当需要特定优先级的线程时就没法通过线程池来实现。

  3.6 线程的同步

  在多线程应用中,我们需要考虑不同线程之间的数据同步和防止死锁。当两个或多个线程之间同时等待对方释放资源的时候就会形成线程之间的死锁。为了防止死锁的发生,我们需要通过同步来实现线程安全。在Visual Basic.NET中提供了三种方法来完成线程的同步。

  (1) 代码域同步:使用Monitor类可以同步静态/实例化的方法的全部代码或者部分代码段。

  (2) 手工同步:可以使用不同的同步类(诸如WaitHandle, Mutex, ReaderWriterLock, ManualResetEvent, AutoResetEvent 和Interlocked等)创建自己的同步机制。这种同步方式要求你自己手动的为不同的域和方法同步,这种同步方式也可以用于进程间的同步和解除由于对共享资源的等待而造成的死锁。

  (3) 上下文同步:使用SynchronizationAttribute为ContextBoundObject对象创建简单的,自动的同步。这种同步方式仅用于实例化的方法和域的同步。所有在同一个上下文域的对象共享同一个锁。

  4. 结束语

  本文讨论了Visual Basic.NET中多线程开发技术。多线程技术是实现需要并发执行的应用程序的较好选择,尤其对于大部分时间被阻塞的程序段,例如在开发访问网络资源,系统开销比较大的操作或实现快速的用户界面响应时,具有不可替代的作用。但由于每个线程都需要额外的内存来创建,同时还需要处理器时间片来运行和管理线程,因此如果创建的线程过多,反而会降低应用程序的性能。所以在设计多线程应用程序时,应慎重对待,建立合理的系统模型,这样才能使应用程序获得最佳的性能。

作者:hlhero    责编:豆豆技术应用

正在加载评论...