内容简介.NET Framework为VB程序员提供了强大的线程模型,可以让程序员很好地控制应用程序中的线程。本书介绍了如何利用.NET的线程功能创建和操作线程,如何设计应用程序,如何防范常见的错误,如何避免应用程序失去控制等内容。全书共分7章,分别讲述了线程的定义、线程的创建、线程的同步、设计模式、线程应用程序的伸缩、线程的调试和跟踪等内容。本书适合于从事.NET开发的VB程序员阅读,不要求读者具备任何线程方面的知识。Kourosh Ardestani,Fabio Claudio Ferracchiati et al:Visual Basic.NET Threading HandbookEISBN:1-861007-13-2Copyright? 2002 by Wrox Press Ltd.Authorized translation from the English language edition published by Wrox Press Ltd.All rights reserved. For sale in the People's Republic of China only.Chinese simplified language edition published by Tsinghua University Press.
前言 那些在同一时刻执行多项任务的应用程序被称为多线程应用程序。程序的执行不是从Main()方法开始,在该方法内部调用其他方法,然后又在Main()方法中结束,而是以完全不同的顺序来执行代码,执行的顺序通常都是由操作系统定义的。编写并发应用程序的方式不尽相同,它依赖于平台和操作系统的不同提供了对进程的不同控制。对于VB 6来说,它没有赋予用户这种控制,它是在后台实现线程的,所以当触发事件时,例如一个按钮单击事件,它将在一个单元线程中运行相关的方法,这实质上是为应用程序提供了一个可用资源的副本。.NET Framework使Visual Basic程序员可以使用一个完整的、功能强大的线程模型,这种线程模型允许编程人员精确控制在一个线程中运行的内容,线程何时退出,以及它将访问多少数据等。 本书介绍如何利用.NET Framework所提供的线程功能,并引导您学习线程所提供的各种特性,而且还将为您指出如何在使用线程的过程中避免可能遇到的陷阱。.NET Framework提供的是一种完全不同的线程模型,即自由线程,如果只熟悉VB 6的单元模型的话,则可能会利用到一些已经习惯的东西。 作为开发人员,或许您需要创建一个当处理一些数据时从不等待或是很少等待的应用程序,而且该应用程序一直都可以对用户和事件做出响应。创建一个多线程应用程序正好可以完成上述所需的工作。在Web站点可以找到很多有关线程的文章和其他书里对线程进行介绍的章节,通过阅读这些内容可以让您学会如何使用.NET Framework创建一个线程,以及如何执行一些基本的操作,不过,实现了代码还只是完成了一半的工作。当使用多线程应用程序时,对于通常会阻塞应用程序的操作类型来说,例如文件系统操作,理想的解决方法就是使用线程。当同一时刻有多个线程在同一个文件上进行操作时,线程操作就会引出同步的问题或是伸缩的问题。本书除了将为您介绍如何创建和操纵线程,还会讲解如何设计应用程序以避免可能遇到的这些问题,并应用合适类型的锁,以便在它等候某个其他的操作完成时不阻塞线程。 本书内容 下面是本书每一章将要讲述的内容。 第1章 定义线程 在本章中,我们将讲述线程的基本原理,并对线程进行定义,还会在一个多任务操作中对所要进行的工作进行定义。通过对本书中要用到的一些术语的介绍,您可以更好地理解当创建一个多线程应用程序时其内部运行的机制。我们还定义了应用程序域,这是由.NET Framework引出的一个概念,通过允许只在同一AppDomain(应用程序域)中容易地共享数据,应用程序域可以帮助用户为线程和应用程序提供一些基本的安全和保护。 第2章 .NET中的线程 在本章中,将演示如何在.NET中创建一个线程,并以具体的实例讲述如何使用ThreadStart委托和设置一个线程的优先级。我们还介绍了一种执行线程任务的最直接的方式,即通过使用计时器来完成,这样就可以调度线程让它们按照某个规则的时间间隔来执行。之后,我们还将介绍线程背后的一些陷阱,并描述在因不当的使用而导致系统资源耗尽或是应用程序阻塞时,何时应考虑使用线程。 第3章 使用线程 本章介绍了在应用程序中实际实现线程的具体方法和技巧,并叙述如何执行加锁、实现监控,以及如何使应用程序线程安全执行。这就是众所周知的同步技术,有很多不同的方式都可以实现同步。本章将介绍诸如互斥、使用事件同步,以及共享域的线程同步等方面的内容。在本章的最后,我们将引导您创建一个数据库连接池和线程安全包装器,创建过程中会用到本章前面讲到的线程和同步技术。 第4章 设计模式 本章将使用有关线程的理论进行实际的应用,解释.NET Framework操作的模型以及您的应用程序可能适合的理论模型的类型,并会介绍如何实现它们,以及应注意的陷阱。对于这个主题来说,一章的内容是远远不够的。不过本章内容为程序员提供了设计棘手问题时需要用到的基础知识。 第5章 线程应用程序的伸缩 本章主要介绍了两个主题。首先,我们介绍了ThreadPool类,该类包含了许多您的应用程序能够用来节省创建和破坏线程所要耗费的系统开销的固定线程。在论述SMP(对称多处理)的优点之前,我们将介绍如何以及何时使用池。本章的第二部分将介绍创建线程管理类方面的内容,该类允许您对在应用程序中创建的多个线程进行管理,还将介绍在遇到大量的在管理类的构造函数中指定的线程时如何处理线程队列的问题。在介绍管理类的过程中将涉及到很多您需要了解的棘手问题,通过学习本章内容,开发人员可以更好地进行有关线程应用程序的开发与设计。 第6章 调试与跟踪线程 由于可以使用多个线程,而所有的线程将并行操作,并使用相同的数据,于是在程序出错时调试一个多线程的应用程序是非常困难的。Visual Studio.NET和System. Diagnostics命名空间为您提供了不同的功能来跟踪线程的执行。在这一章里,介绍如何使用Visual Studio.NET所提供的这些功能,以及监控应用程序的性能方面的内容。 第7章 联网与线程 在最后一章中,将利用前面几章讲到的理论和技术为您演示如何利用异步方法调用创建线程应用程序。本章将以具体的示例来介绍如何在线程内部进行异步操作,并引导您创建一个客户机/服务器应用程序,以便来自用户和网络的请求一直都可以使用该应用程序完成所需的操作。 读者须知 本书不是一本入门级的开发类图书。作者希望阅读本书的读者是一个已经精通.NET Framework编程的程序员。在学习本书的内容之前,了解Visual Basic.NET的知识是很有用的,因为书中使用的所有代码都是使用Visual Basic.NET编写的。或许读者已经对线程方面的知识有所了解,本书还会提到老的VB 6单元线程模型方面的内容,不过,对于学习本书的读者来说,在此之前并不需要学习有关.NET线程方面或是其他方面的知识。 本书将使读者能够熟练且正确地创建多线程的、并发的应用程序,并通过这些应用程序高效地利用计算机的可用资源。对于要创建值得花费时间的、可伸缩的企业应用程序的开发人员来说,学习和深入了解.NET中的线程方面的知识是非常必要的。