.NET 多线程

  • 多线程

     在一个程序中,这些独立运行的程序片断叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”。多线程处理一个常见的例子就是用户界面。利用线程,用户可按下一个按钮,然后程序会立即作出响应,而不是让用户等待程序完成了当前任务以后才开始响应。

  • 基础概念
    • 进程
     进程是应用程序的实例要使用的资源的一个集合。每个应用程序都在各自的进程中运行来确保应用程序不受其他应用程序的影响,如果一个应用程序失败了, 只会影响自己的进程,其他进程中的应用程序可以继续运行。进程是操作系统为我们提供的一种保护应用程序的一种机制。
    • 线程
     线程是进程中基本执行单元, 一个进程中可以包含多个线程,在进程入口执行的第一个线程是一个进程的主线程,在.Net应用程序中,都是以Main()方法作为程序的入口的, 所以在程序运行过程中调用这个方法时,系统就会自动创建一个主线程。他们之间的关系简单说:线程是进程的执行单元,进程是线程的一个容器了。
    • 线程池
     应用程序可以有多个线程,这些线程在休眠状态中需要耗费大量时间来等待事件发生。其他线程可能进入睡眠状态,并且仅定期被唤醒以轮循更改或更新状态信息,然后再次进入休眠状态。为了简化对这些线程的管理,.NET框架为每个进程提供了一个线程池,一个线程池有若干个等待操作状态,当一个等待操作完成时,线程池中的辅助线程会执行回调函数。线程池中的线程由系统管理,程序员不需要费力于线程管理,可以集中精力处理应用程序任务。线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程.每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中.如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙.如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值.超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。
 
  • 优点
    • 用户体验更好
    • 可同时执行多个任务
    • 可将任务放到后台执行
  • 缺点
    • 大量线程由于操作系统切换线程而导致性能下降
    • 不易调试
    • 耗费资源
    • 线程死锁
  • 代码示例
    • 引用多线程程序集:
using System.Threading;
    • 新建线程实例:
Threadth = null;th = new Thread(new ThreadStart(MethodName));
    • 启动多线程:
th.Start();
    • 调用方法:
this.Invoke(new Action(this.MethodName));

this
.Invoke(new Action<T>(this.MethodName),parameter);
    • 注销线程:
if(th.IsAlive)

    {th.Abort();}
    • 当线程运行时禁止调用该线程的方法再次创建新的线程

if(th != null)

if (th.IsAlive)

         return;

 

posted @ 2013-07-24 11:58  M守护神  阅读(1279)  评论(0编辑  收藏  举报