进程,线程,线程池(Process, ProcessThread, Thread, ThreadPool)
进程的概念:?
线程的概念:?
.net中与进程和线程相关的类有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()函数。