前几天写了两篇文章 介绍了.Net进行Winform开发的多线程以及跨线程修改界面的问题,今天看到一篇文章更加丰富和完善,边读边记,希望能学到更扎实的东西,原文地址:
http://www.cnblogs.com/yizhu2000/archive/2008/01/03/1011958.html#wm1
首先我学到了另外一种开启线程的方法
class ThreadLearning
{
static void Main()
{
WaitCallback w = new WaitCallback(Calculate);
ThreadPool.QueueUserWorkItem(w, 1.0);
ThreadPool.QueueUserWorkItem(w, 2.0);
ThreadPool.QueueUserWorkItem(w, 3.0);
ThreadPool.QueueUserWorkItem(w, 4.0);
Console.ReadLine();
}
static void Calculate(object objDiameter)
{
double diameter = (double)objDiameter;
Console.WriteLine("diameter:{0} perimeter: {1}",diameter,diameter * Math.PI);
}
}
{
static void Main()
{
WaitCallback w = new WaitCallback(Calculate);
ThreadPool.QueueUserWorkItem(w, 1.0);
ThreadPool.QueueUserWorkItem(w, 2.0);
ThreadPool.QueueUserWorkItem(w, 3.0);
ThreadPool.QueueUserWorkItem(w, 4.0);
Console.ReadLine();
}
static void Calculate(object objDiameter)
{
double diameter = (double)objDiameter;
Console.WriteLine("diameter:{0} perimeter: {1}",diameter,diameter * Math.PI);
}
}
ThreadPool.QueueUserWorkItem(new WaitCallback(method))
线程池:
这个是使用了线程池,我感觉用这个带来的好处就是可以设置一个线程上限,当达到线程上限的时候,新加入队列的线程会等待后执行,这样可以控制应用程序的最大的并发工作线程数。
更重要的是,使用线程池,可以减少线程创建以及销毁的次数,线程的创建设计到用户模式与内核模式的切换,内存分配,dll通知等一系列的操作,开销很大。
异步与线程:
然后他的一句话点醒了我对异步以及多线程的理解:多线程是实现异步的一种方式。
以前我一直以为异步就是多线程,其实不然,异步可以用多进程或多纤程来实现,还有些硬件上自己具备处理器,对于异步的实现就可以向一个具备独立处理器的硬件发送一条执行某操作的命令,然后给该硬件一个回调函数,当该硬件执行完毕后调用我们给定的回调函数即可。