[转载]进程,线程,线程池(Process, ProcessThread, Thread, ThreadPool)
源作者与出处未查明,如有冒犯请告知
Process
Process既包括静态方法又包括实例方法,静态方法一般用来获得关于进程的信息,实例方法一般用于对具体进程进行操作。如:
Process p=Process.GetCurrentProcess(); //静态方法
p.CloseMainWindow(); //实例方法
ProcessThread
ProcessThread没有构造函数,一般通过Process的Threads属性获得。通过它可以获取系统内的线程信息。如:
ProcessThreadCollection c=Process.GetCurrentProcess().Threads;
foreach( ProcessThread pt in c ){
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) 编辑 收藏 举报