SharpStreaming项目开发纪实:构建基本的服务器及客户端应用(三)——准备知识(多线程编程)

来源:互联网 发布:ubuntu php环境搭建 编辑:程序博客网 时间:2024/04/30 09:32

    本篇文章将简要介绍多线程编程的一些基础知识。多线程编程是很多程序开发特别是服务器开发方面经常会使用的重要技术。

    在.NET中,System.Threading命名空间提供了大量的类和接口来支持多线程编程。查阅MSDN,对Thread类有这样的描述:创建并控制线程,设置其优先级并获取其状态。在编程中经常会使用到的Thread类中的相关方法如下:

    (1)Start():启动并开始执行线程;
    (2)Suspend():挂起线程(如果线程已经挂起,则不起作用);
    (3)Resume():继续已挂起的线程;
    (4)Interrupt():中断处于 WaitSleepJoin 线程状态的线程;
    (5)Join():阻塞调用线程,直到某个线程终止时为止;
    (6)Sleep():将当前线程阻塞指定的毫秒数;
    (7)Abort():在调用此方法的线程上引发 ThreadAbortException,以开始终止此线程的过程。调用此方法通常会终止线程。

    要创建并启动一个线程,可以通过编写类似如下的代码来实现:

    使用new关键字创建一个或多个线程的好处是可以手动控制线程的启动、挂起、恢复、退出等,但也存在一些弊端,比如在一些应用程序中可能无法确切地知道需要线程的最佳数量,且创建过多的线程会对多线程资源的管理工作带来一定的困难。

    使用.NET线程池技术可以很好地解决这个问题,特别是当我们的应用程序需要重复执行一些后台任务(如服务器中的循环侦听操作)时,使用线程池来管理这些资源将会使得程序的性能达到更佳状态。使用线程池,可以将无法及时处理的请求保存起来,并直至有线程释放出来时,处理这些请求。

    C#中的ThreadPool是一个静态类,通过该类可以直接调用QueueUserWorkItem方法即可以将我们应用程序需要执行的任务轻松地加入线程池,让线程池来管理任务的执行(线程池中有空闲线程时将会执行),让线程池来管理资源。

    下面是一个简单的使用线程池技术来实现多线程的例子:

    关于C#多线程编程的基本知识就介绍到这里,更多的资源请参考MSDN或相关文档。最后推荐大家阅读《More Effective C#: 50 Specific Ways to Improve Your C#》一书中的条目11:使用线程池而不是创建线程。

原创粉丝点击