流星,霎那划过天际

导航

[转载]进程,线程,线程池(Process, ProcessThread, Thread, ThreadPool)

源作者与出处未查明,如有冒犯请告知

 

 Process

Process既包括静态方法又包括实例方法,静态方法一般用来获得关于进程的信息,实例方法一般用于对具体进程进行操作。如:

    Process p=Process.GetCurrentProcess(); //静态方法

    p.CloseMainWindow(); //实例方法

 

ProcessThread
ProcessThread
没有构造函数,一般通过ProcessThreads属性获得。通过它可以获取系统内的线程信息。如:


    ProcessThreadCollection c
=Process.GetCurrentProcess().Threads;

      foreachProcessThread pt in ){

        Console.WriteLine(pt.StartTime.ToString());

    }

 

Thread
Thread
一般用来创建多线程的程序

 

ThreadPool
线程的创建是很耗
cpu时间的,频繁地创建线程影响系统的性能。线程池可以维护一组创建好的工作线程,在需要的时候应用,可以提高性能。ThreadPool.net实现的一个线程池类,默认最大允许的线程数目是25,不能更改(不太确定,但没找到更改的办法),可以用来构建不太大的系统。它的所有方法都是静态的,它是Singleton设计模式的一个实现,每一个进程只能拥有一个线程池,第一个调用的静态方法引发创建一个线程池对象。应用的时候只需要提供一个回调函数,把它加到线程池的工作队列中。如:

using System;
using System.Threading;
class ThreadPoolSample
{
  public ThreadPoolSample()
  {
   ThreadPool.QueueUserWorkItem(new WaitCallback(Counter));
   ThreadPool.QueueUserWorkItem(new WaitCallback(Counter2));
   Thread.Sleep(10000);
  }
  void Counter(object state)
  {
   //略
  }
  void Counter2(object state)
  {
   //略
  }
}

后记:线程池中的线程和自创建线程的区别:

(1)主函数退出要等待自创建线程退出才真正退出,主函数退出不会等待线程池中的线程
~~~~~~~~~~~~~~~好像不对,主函数结束,线程结束,有待研究。

(挺别扭,C# NetWork Programming上说的)。

(2)自创线程要调用Start()函数才开始运行,线程池中的线程不需要调用Start()函数。

 补充:ThreadPool 创建的线程默认是后台线程,即Thread.IsBackground = true ; 而自创线程默认是前台线程,即Thread.IsBackground = false;

posted on 2010-03-01 11:08  流星,霎那划过天际  阅读(1641)  评论(1编辑  收藏  举报