一:概述和概念
C#支持通过多线程并行地执行代码,一个线程有它独立的执行路径,能够与其它的线程同时地运行。一个C#程序开始于一个单线程,这个单线程是被CLR和操作系统(也称为“主线程”)自动创建的,并具有多线程创建额外的线程。这里的一个简单的例子及其输出:
引入的命名空间:
using System;
using System.Threading;
class ThreadTest {
static void Main() {
Thread t = new Thread (WriteY);
t.Start();
while (true) Console.Write ("x");
} static void WriteY() {
while (true) Console.Write ("y");
}
}
aaarticlea/png;base64,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*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" alt="" />
主线程创建了一个新线程“t”,它运行了一个重复打印字母"y"的方法,同时主线程重复但因字母“x”。CLR分配每个线程到它自己的内存堆栈上,来保证局部变量的分离运行。在接下来的方法中我们定义了一个局部变量,然后在主线程和新创建的线程上同时地调用这个方法。
static void Main() {
new Thread (Go).Start(); // Call Go() on a new thread
Go(); // Call Go() on the main thread
} static void Go() {
// Declare and use a local variable - 'cycles'
for (int cycles = 0; cycles < 5; cycles++) Console.Write ('?');
}
aaarticlea/png;base64,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" alt="" />
当线程们引用了一些公用的目标实例的时候,他们会共享数据。下面是实例:
class ThreadTest {
bool done; static void Main() {
ThreadTest tt = new ThreadTest(); // Create a common instance
new Thread (tt.Go).Start();
tt.Go();
} // Note that Go is now an instance method
void Go() {
if (!done) { done = true; Console.WriteLine ("Done"); }
}
}
因为在相同的<b>ThreadTest</b>实例中,两个线程都调用了<b>Go()</b>,它们共享了<b>done</b>字段,这个结果输出的是一个
"Done"
,而不是两个。
静态字段提供了另一种在线程间共享数据的方式,下面是一个以done为静态字段的例子:
class ThreadTest {
static bool done; // Static fields are shared between all threads static void Main() {
new Thread (Go).Start();
Go();
} static void Go() {
if (!done) { done = true; Console.WriteLine ("Done"); }
}
}
上述两个例子足以说明, 另一个关键概念, 那就是线程安全(或反之,它的不足之处! ) 输出实际上是不确定的, "Done" ,可以被打印两次。然而,如果我们在Go方法里调换指令的顺序, "Done"被打印两次的机会会大幅地上升:
static void Go() {
if (!done) { Console.WriteLine ("Done"); done = true; }
}
问题就是一个线程在判断if块的时候,正好另一个线程正在执行WriteLine语句——在它将done设置为true之前。
补救措施是当读写公共字段的时候,提供一个排他锁;C#提供了lock语句来达到这个目的:
class ThreadSafe {
static bool done;
static object locker = new object(); static void Main() {
new Thread (Go).Start();
Go();
} static void Go() {
lock (locker) {
if (!done) { Console.WriteLine ("Done"); done = true; }
}
}
}
当两个线程争夺一个锁的时候(在这个例子里是locker),一个线程等待,或者说被阻止到那个锁变的可用。在这种情况下,就确保了在同一时刻只有一个线程能进入临界区,所以"Done"只被打印了1次。代码以如此方式在不确定的多线程环境中被叫做线程安全。
临时暂停,或阻止是多线程的协同工作,同步活动的本质特征。等待一个排它锁被释放是一个线程被阻止的原因,另一个原因是线程想要暂停或Sleep一段时间:
Thread.Sleep (TimeSpan.FromSeconds (30));
一个线程也可以使用它的Join方法来等待另一个线程结束:
Thread t = new Thread (Go); // Assume Go is some static method
t.Start();
t.Join();
一个线程,一旦被阻止,它就不再消耗CPU的资源了。
线程是如何工作的
线程被一个线程协调程序管理着——一个CLR委托给操作系统的函数。线程协调程序确保将所有活动的线程被分配适当的执行时间;并且那些等待或阻止的线程——比如说在排它锁中、或在用户输入——都是不消耗CPU时间的。
在单核处理器的电脑中,线程协调程序完成一个时间片之后迅速地在活动的线程之间进行切换执行。这就导致“波涛汹涌”的行为,例如在第一个例子,每次重复的X 或 Y 块相当于分给线程的时间片。在Windows XP中时间片通常在10毫秒内选择要比CPU开销在处理线程切换的时候的消耗大的多。(即通常在几微秒区间)
在多核的电脑中,多线程被实现成混合时间片和真实的并发——不同的线程在不同的CPU上运行。这几乎可以肯定仍然会出现一些时间切片, 由于操作系统的需要服务自己的线程,以及一些其他的应用程序。
线程由于外部因素(比如时间片)被中断被称为被抢占,在大多数情况下,一个线程方面在被抢占的那一时那一刻就失去了对它的控制权。
线程 vs. 进程
属于一个单一的应用程序的所有的线程逻辑上被包含在一个进程中,进程指一个应用程序所运行的操作系统单元。
线程于进程有某些相似的地方:比如说进程通常以时间片方式与其它在电脑中运行的进程的方式与一个C#程序线程运行的方式大致相同。二者的关键区别在于进程彼此是完全隔绝的。线程与运行在相同程序其它线程共享(堆heap)内存,这就是线程为何如此有用:一个线程可以在后台读取数据,而另一个线程可以在前台展现已读取的数据。
何时使用多线程
多线程程序一般被用来在后台执行耗时的任务。主线程保持运行,并且工作线程做它的后台工作。对于Windows Forms程序来说,如果主线程试图执行冗长的操作,键盘和鼠标的操作会变的迟钝,程序也会失去响应。由于这个原因,应该在工作线程中运行一个耗时任务时添加一个工作线程,即使在主线程上有一个有好的提示“处理中...”,以防止工作无法继续。这就避免了程序出现由操作系统提示的“没有相应”,来诱使用户强制结束程序的进程而导致错误。模式对话框还允许实现“取消”功能,允许继续接收事件,而实际的任务已被工作线程完成。BackgroundWorker恰好可以辅助完成这一功能。
在没有用户界面的程序里,比如说Windows Service, 多线程在当一个任务有潜在的耗时,因为它在等待另台电脑的响应(比如一个应用服务器,数据库服务器,或者一个客户端)的实现特别有意义。用工作线程完成任务意味着主线程可以立即做其它的事情。
另一个多线程的用途是在方法中完成一个复杂的计算工作。这个方法会在多核的电脑上运行的更快,如果工作量被多个线程分开的话(使用Environment.ProcessorCount属性来侦测处理芯片的数量)。
一个C#程序称为多线程的可以通过2种方式:明确地创建和运行多线程,或者使用.NET framework的暗中使用了多线程的特性——比如BackgroundWorker类, 线程池,threading timer,远程服务器,或Web Services或ASP.NET程序。在后面的情况,人们别无选择,必须使用多线程;一个单线程的ASP.NET web server不是太酷,即使有这样的事情;幸运的是,应用服务器中多线程是相当普遍的;唯一值得关心的是提供适当锁机制的静态变量问题。
何时不要使用多线程
多线程也同样会带来缺点,最大的问题是它使程序变的过于复杂,拥有多线程本身并不复杂,复杂的是线程的交互作用,这带来了无论是否交互是否是有意的,都会带来较长的开发周期,以及带来间歇性和非重复性的bugs。因此,要么多线程的交互设计简单一些,要么就根本不使用多线程。除非你有强烈的重写和调试欲望。
当用户频繁地分配和切换线程时,多线程会带来增加资源和CPU的开销。在某些情况下,太多的I/O操作是非常棘手的,当只有一个或两个工作线程要比有众多的线程在相同时间执行任务块的多。稍后我们将实现生产者/耗费者 队列,它提供了上述功能。
多线程程序一般被用来在后台执行耗时的任务。主线程保持运行,并且工作线程做它的后台工作。对于Windows Forms程序来说,如果主线程试图执行冗长的操作,键盘和鼠标的操作会变的迟钝,程序也会失去响应。由于这个原因,应该在工作线程中运行一个耗时任务时添加一个工作线程,即使在主线程上有一个有好的提示“处理中...”,以防止工作无法继续。这就避免了程序出现由操作系统提示的“没有相应”,来诱使用户强制结束程序的进程而导致错误。模式对话框还允许实现“取消”功能,允许继续接收事件,而实际的任务已被工作线程完成。BackgroundWorker恰好可以辅助完成这一功能。
在没有用户界面的程序里,比如说Windows Service, 多线程在当一个任务有潜在的耗时,因为它在等待另台电脑的响应(比如一个应用服务器,数据库服务器,或者一个客户端)的实现特别有意义。用工作线程完成任务意味着主线程可以立即做其它的事情。
另一个多线程的用途是在方法中完成一个复杂的计算工作。这个方法会在多核的电脑上运行的更快,如果工作量被多个线程分开的话(使用Environment.ProcessorCount属性来侦测处理芯片的数量)。
一个C#程序称为多线程的可以通过2种方式:明确地创建和运行多线程,或者使用.NET framework的暗中使用了多线程的特性——比如BackgroundWorker类, 线程池,threading timer,远程服务器,或Web Services或ASP.NET程序。在后面的情况,人们别无选择,必须使用多线程;一个单线程的ASP.NET web server不是太酷,即使有这样的事情;幸运的是,应用服务器中多线程是相当普遍的;唯一值得关心的是提供适当锁机制的静态变量问题。
何时不要使用多线程
多线程也同样会带来缺点,最大的问题是它使程序变的过于复杂,拥有多线程本身并不复杂,复杂是的线程的交互作用,这带来了无论是否交互是否是有意的,都会带来较长的开发周期,以及带来间歇性和非重复性的bugs。因此,要么多线程的交互设计简单一些,要么就根本不使用多线程。除非你有强烈的重写和调试欲望。
当用户频繁地分配和切换线程时,多线程会带来增加资源和CPU的开销。在某些情况下,太多的I/O操作是非常棘手的,当只有一个或两个工作线程要比有众多的线程在相同时间执行任务块的多。稍后我们将实现生产者/耗费者 队列,它提供了上述功能。
2.创建和使用多多线程
线程用Thread类来创建, 通过ThreadStart委托来指明方法从哪里开始运行,下面是ThreadStart委托如何定义的:
public delegate void ThreadStart();
调用Start方法后,线程开始运行,线程一直到它所调用的方法返回后结束。下面是一个例子,使用了C#的语法创建TheadStart委托:
class ThreadTest {
static void Main() {
Thread t = new Thread (new ThreadStart (Go));
t.Start(); // Run Go() on the new thread.
Go(); // Simultaneously run Go() in the main thread.
}
static void Go() { Console.WriteLine ("hello!"); }
在这个例子中,线程t执行Go()方法,大约与此同时主线程也调用了Go(),结果是两个几乎同时hello被打印出来:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAa0AAABlCAIAAABx+CsNAAAL3UlEQVR4nO3d63OTVQLH8eNfoMsKyZM855w0NC1Ner+RUnJpm+ahpFAuLZRehLLrsgrILriDSipQLuXSAr09sUJLyyhlXQU6Lra2zBZWQJQdZFAZTFhEcXVhVnFVZp1ZwX2RRC42tQXcGT2/z3x5wzzN01e/SZukh7zas7909qwJEyY4HXaEEBIw0tezr3R2iSXn4ajClqjCFmNhM0IICRXp79lbOrtYpzSQ0iuk9Mp9pZ8hhJBQhXZQyttKZlwiMy6RGf9ECCGx6u/ZVzq7RHLWkcKLpPAiKfwQIYTEKriDOvsmMukCmXSBTHofIYTECjuIEBK90A46NpOCD0jBB6TgAkIIiVV4B+tIwUVScJEUfIgQQmIV2kFnPSn4hBR8Qgo+RgghsQrv4FbiuUw8l4nnEkIIiVVoB3MayJRPyZRPyZR/IYSQWIV2MLeRFH1Oij4nRVcQQkiswjvYTIq+JEVfkqIvEEJIrEKfJ8ltIUVXSdFVUvQVQgiJVWgHXSqZ+TWZ+TWZ+R+EEBKr0M/FyjOk7BtS9g0p+y9CCIlVcAf1k58lc78lc7+9b+51hBASKuwgQkj0sIMIIdHDDiKERA87iBASvfDrxQWtpOI6qbhOKq4hhJBYhd4/qLSSOdfJnOtkzjWEEBKr0A7mt5KSa6TkGin5BiGExCr8d7caiecK8Vwhns8QQkisQud2Zm8kzvPEeZ44/44QQmIV2sHxNSTrJMl6i0w4iRBCYtXfs790dokxueR+y7L7LY8/EI8QQmJF+nu6S2fPMpvNnFHOqIEzhBASKuwgQkj0wjtosXDOOecGAADBYAcBQHTYQQAQHXYQAESHHQQA0WEHAUB02EEAEB12EABEhx0EANFhBwFAdNhBABAddhAARIcdBADRRdxBzjnnjDHGGOfccFcLybnhuwdjjDHOvr+5w7lmZPcMPxz2HQCGNIwd5PdoB2+MHB/kuedwrhnZPbGDADAsg+wg54xzFpM9zfVw7bpNW9c9Vlpp4xYTp+yO7sBkZopnzqry3633qara1FC3vGrRlMTEcVEy4yO4ZkT3pLLJkmqr9D625DFvpS3VYpLv8LsHgJ+/iDsYN3nhnIbjx879+93uLdsrqNVCJfmO7kB1LC6dzaj1tg0Ezl94//LVj17r7Pfa7CnRWj0dwTUjIUsai9VdsSMwcGggsKPCbbVo7vC7B4Cfv0F3kHPODSZzsruirOH15vr1Oypp1h3vIGc8KpqbM1LGZ3tmVc1tPt7V0dpfbXPcvHHDuWYksIMAMHwRfz9IdaONSROsT/auXLXq2TIpzTRm1GitVqvVanU6mVKDIXQp5wYmy3qdpL2JpJflm34O5dxA9boxo6g5K/OJ3qYWtb/a5kw1SSO9xmAwGAxMlvVS5HsZDIbwDla2BQYODQTaKrGDADCEiDvIZMmU6rBX969eu7njt2kzp+TYXYridrnd2VmpljjGo0JfYGRjE5MybTluxa0oiqIo7jx3TkZq4rjQKyy3PKDTVt3v8/kib9xQ1wRf+YhNTM3Icee5b75X7G33ojptXKZrlvpOT2/PO+osV2acVncnzysBQAQ/vIPV9S8dUDf3/e2NN/2BgP+U37+7zVs2nbI4xiiT2dhEOn7Rwvq9h/2BM/5AIBAInDnhP1znXTiZUsbYPd1Bxhilkxd66w77T5wZ6l5Ur41Jy8mtOdTW1naoJjcnLebOfr4GABEMtYPRKXabt6/p5bfPvt5ztLttz/ZtrR2du48dfVFdXVcYnxEbJWk1sckZnhU7NrTt6d65RW3cUle3uUFVd+7vbmtauaIsO8kSrQu/UHuXO8j0UmxCkmfxyvpdz/X27m5vb21sbGxtb9/d2/vcrvqViz1JCbGSnt30zTuyV7za0tLy6opsR0r09+8FABA09A46bN6+ziPvXnhzZ0OZVYkeFZVky/zDAdXnCz7JelATle6eVvvXI11/fKapMq+4IM/pdEwqnlfZeLyv/8D5PQumZycwSeYGA7+bHeTcwLleNqbnTa/teeNAd2vHwkxrQpRGo4lKsGYu7GjtPvBGT+30vHSjrA++1ZHqtaZUp636oM/nO1htc6aa8HwQACIZcgdTHTZv38ZtTS8ss05ONxp1Gmq2RlV1qj7fGd/s/PHmX4xVJj7UuN//j4ufXb50/r1z/vfOnj3rP/f++UtXv/ji7MenGp7My7RqdfdkByXzVFvx09171tZ7i60JRiNnsiwzbjQmWIu99Wv3dD9dbJtqlm7dwRuPgx0EgEiG/P1gmtNe3b961crWUm2GWdZKOmq2yuXP+ny+c22VSpblgXGznb/eOfD2Xw6+9tKWJrW5RfX5fD5VVZsbGhtXr3l67szU+GT9XT8fZMzAmDap0lm2ZaDz0VWP2EbraPB90YzKVD/G9uiqhZ0DW8uclUlaxgyMGTiTjXHJiVMXl5eXL56amBxnvLP3YwOACCK/b0avjU61T/T21dTUbC+Xx1uoJEnUPF4u366qqn97ef548wPRBRNL1/7pYNv6tVUpJj2ner0cRiml4Y/kcc4Zk3Wascn2bG+fqqp93mx78liNTg5/6m3IayjjjEnmqbaS6u6u6vWPT0kwUk4ppZTKjNLYgt/XPNHV7b3p+WD4tWVKKaW3vZYMAHCr4e1ghWwN7aBVrgjvoNX8Sw1PdMxcvOtkU+OmtUX6FJNeo/sRdpBxzrleHpvuKqzt2du0bfmiTDnBKOtlWZbHUXn6b1bWNPfUKq6M6PDvB8MfL6bffRfYQQCIJOLn6kxZU9xLfC0HPzx+/PjJPavXlKU67I7UOWtW7zl5+vTpr07ueWFNWYkjdmxcZlZ5R41vb2+P2t6mNrf4QratqFk6LS05TtIkxqcVV9VsXNfS1NrR9fzRj06fPv3R0ee7OlqbWtZtrKkqTotP0CT84DWJYx6MTcn0VHfW7drXu1ttb1Vb1BZVbVPVnn276jq3eMZnxGp0zGDgBgOX9cnxaSVVNZs2+DZsqqkqSbvx4zkAwG0i7qDZs6i0/vChE+/6/f5TR/u6ltpLikvsS7v6jp7y+/3vnTrq71paXW6ldByVp5d527r8gVPB9w8GndrX37nIkZU4+peZ6Y5ltf3HDgUC/lsFAoeO9a9f5kjLGJWR5li2PuI1tcsc6RM0mkHeqxjwBwL+gXbv+uk0LY7pqSG4gzopK3jTI4EjwS/PknTYQQAYVMTPFxvjkiyZOTl5+W6325XrnJgSY7FYYlImOnNdbrc735XrnpiSFm/iPIqzOEtqVrZbcYU+UKIoiqK4bM4JSTEmI6XR0TEpGc7cHEVR3G63Oz/0z60oSk6uMyMlJjp6GNeYGBvksyuKW1HczqzU9DgWHcUZNwR3kDFT8AFzldybvhw7CACDiPz3B5lM9VLog7ySpJMZpZTJuu/+S6uTZRr8OZRSWafT3kYn6eTg+HAm6yVJuv0CrVYrSZJeZpwP4xpmiPBZZq1W0sl6ettfSGThB7zpywEABoO/yw8AosMOAoDosIMAIDrsIACIDjsIAKLDDgKA6HB+MQCIDucXA4Do/u/nFzcP4/ziQa8Z0T2pbIpPsz9UvWTJkuqH7GnxOL8YACLC+cUAIDqcXwwAosP5xQAgOpxfDACiu6fnFwdwfjEA/PTcu/OL22+cX9yO84sB4KcD5xcDgOhwfjEAiO7uzy/uwPnFAPCThvOLAUB0P9r5xfKPcn7xhojnF2/4/vnF2EEAGA6cXwwAosP5xQAgOpxfDACiw/nFACA6/F1+ABAddhAARIcdBADRYQcBQHTYQQAQHXYQAESHHQQA0WEHAUB0pO+V/TNnzIg2mbRaSauVJEmHEEJCRQ4dPLB40SOK4rbbJtptEx12G0IICRV568SRgf4/9x7Y+8rLLyKEkICR9WtXbd64dmvdhq31G7dt2bitfuNWhBASKTJp0iSXy5Wbm+t0Oh0hTqfTmQMAIAayfPnyefPmTZs2LT8/P/hfLpfL7VYmT57s8RR6PIUAAD9vpKmp6amnnlqwYEFZWVlJScmsWbPmzJlTUVExb968+fPnz58//1cAAD9r/wO/UCQkq/abRwAAAABJRU5ErkJggg==" alt="" />
一个线程可以通过C#堆委托简短的语法更便利地创建出来:
static void Main() {
Thread t = new Thread (Go); // No need to explicitly use ThreadStart
t.Start();
...
}
static void Go() { ... }
在这种情况,ThreadStart被编译器自动推断出来,另一个快捷的方式是使用匿名方法来启动线程:
static void Main() {
Thread t = new Thread (delegate() { Console.WriteLine ("Hello!"); });
t.Start();
}
线程有一个IsAlive属性,在调用Start()之后直到线程结束之前一直为true。一个线程一旦结束便不能重新开始了。
将数据传入ThreadStart中
我们想更好地区分开每个线程的输出结果,让其中一个线程输出大写字母。我们传入一个状态字到Go中来完成整个任务,但我们不能使用ThreadStart委托,因为它不接受参数,所幸的是,.NET framework定义了另一个版本的委托叫做ParameterizedThreadStart, 它可以接收一个单独的object类型参数:
public delegate void ParameterizedThreadStart (object obj);
之前的例子看起来是这样的:
class ThreadTest {
static void Main() {
Thread t = new Thread (Go);
t.Start (true); // == Go (true)
Go (false);
}
static void Go (object upperCase) {
bool upper = (bool) upperCase;
Console.WriteLine (upper ? "HELLO!" : "hello!");
}
aaarticlea/png;base64,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" alt="" />
在整个例子中,编译器自动推断出ParameterizedThreadStart委托,因为Go方法接收一个单独的object参数,就像这样写:
Thread t = new Thread (new ParameterizedThreadStart (Go));
t.Start (true);
ParameterizedThreadStart的特性是在使用之前我们必需对我们想要的类型(这里是bool)进行装箱操作,并且它只能接收一个参数。
一个替代方案是使用一个匿名方法调用一个普通的方法如下:
static void Main() {
Thread t = new Thread (delegate() { WriteText ("Hello"); });
t.Start();
}
static void WriteText (string text) { Console.WriteLine (text); }
优点是目标方法(这里是WriteText),可以接收任意数量的参数,并且没有装箱操作。不过这需要将一个外部变量放入到匿名方法中,向下面的一样:
static void Main() {
string text = "Before";
Thread t = new Thread (delegate() { WriteText (text); });
text = "After";
t.Start();
}
static void WriteText (string text) { Console.WriteLine (text); }
aaarticlea/png;base64,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" alt="" />
一旦线程开始运行了,外部变量最好被处理成只读的——除非有人愿意使用适当的锁。
另一种较常见的方式是将对象实例的方法而不是静态方法传入到线程中,对象实例的属性可以告诉线程要做什么,如下列重写了原来的例子:
class ThreadTest {
bool upper; static void Main() {
ThreadTest instance1 = new ThreadTest();
instance1.upper = true;
Thread t = new Thread (instance1.Go);
t.Start();
ThreadTest instance2 = new ThreadTest();
instance2.Go(); // 主线程——运行 upper=false
} void Go() { Console.WriteLine (upper ? "HELLO!" : "hello!"); }
命名线程
线程可以通过它的Name属性进行命名,这非产有利于调试:可以用Console.WriteLine打印出线程的名字,Microsoft Visual Studio可以将线程的名字显示在调试工具栏的位置上。线程的名字可以在被任何时间设置——但只能设置一次,重命名会引发异常。
程序的主线程也可以被命名,下面例子里主线程通过CurrentThread命名:
class ThreadNaming {
static void Main() {
Thread.CurrentThread.Name = "main";
Thread worker = new Thread (Go);
worker.Name = "worker";
worker.Start();
Go();
}
static void Go() {
Console.WriteLine ("Hello from " + Thread.CurrentThread.Name);
}
}
前台和后台线程
线程默认为前台线程,这意味着任何前台线程在运行都会保持程序存活。C#也支持后台线程,当所有前台线程结束后,它们不维持程序的存活。
改变线程从前台到后台不会以任何方式改变它在CPU协调程序中的优先级和状态。
线程的IsBackground属性控制它的前后台状态,如下实例:
class PriorityTest {
static void Main (string[] args) {
Thread worker = new Thread (delegate() { Console.ReadLine(); });
if (args.Length > 0) worker.IsBackground = true;
worker.Start();
}
}
如果程序被调用的时候没有任何参数,工作线程为前台线程,并且将等待ReadLine语句来等待用户的触发回车,这期间,主线程退出,但是程序保持运行,因为一个前台线程仍然活着。
另一方面如果有参数传入Main(),工作线程被赋值为后台线程,当主线程结束程序立刻退出,终止了ReadLine。
后台线程终止的这种方式,使任何最后操作都被规避了,这种方式是不太合适的。好的方式是明确等待任何后台工作线程完成后再结束程序,可能用一个timeout(大多用Thread.Join)。如果因为某种原因某个工作线程无法完成,可以用试图终止它的方式,如果失败了,再抛弃线程,允许它与 与进程一起消亡。(记录是一个难题,但这个场景下是有意义的)
拥有一个后台工作线程是有益的,最直接的理由是它当提到结束程序它总是可能有最后的发言权。交织以不会消亡的前台线程,保证程序的正常退出。抛弃一个前台工作线程是尤为险恶的,尤其对Windows Forms程序,因为程序直到主线程结束时才退出(至少对用户来说),但是它的进程仍然运行着。在Windows任务管理器它将从应用程序栏消失不见,但却可以在进程栏找到它。除非用户找到并结束它,它将继续消耗资源,并可能阻止一个新的实例的运行从开始或影响它的特性。
对于程序失败退出的普遍原因就是存在“被忘记”的前台线程。
线程优先级
线程的Priority 属性确定了线程相对于其它同一进程的活动的线程拥有多少执行时间,以下是级别:
enum ThreadPriority { Lowest, BelowNormal, Normal, AboveNormal, Highest }
只有多个线程同时为活动时,优先级才有作用。
设置一个线程的优先级为高一些,并不意味着它能执行实时的工作,因为它受限于程序的进程的级别。要执行实时的工作,必须提升在System.Diagnostics 命名空间下Process的级别,像下面这样:
Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High;
ProcessPriorityClass.High 其实是一个短暂缺口的过程中的最高优先级别:Realtime。设置进程级别到Realtime通知操作系统:你不想让你的进程被抢占了。如果你的程序进入一个偶然的死循环,可以预期,操作系统被锁住了,除了关机没有什么可以拯救你了!基于此,High大体上被认为最高的有用进程级别。
如果一个实时的程序有一个用户界面,提升进程的级别是不太好的,因为当用户界面UI过于复杂的时候,界面的更新耗费过多的CPU时间,拖慢了整台电脑。
降低主线程的级别、提升进程的级别、确保实时线程不进行界面刷新,但这样并不能避免电脑越来越慢,因为操作系统仍会拨出过多的CPU给整个进程。最理想的方案是使实时工作和用户界面在不同的进程(拥有不同的优先级)运行,通过Remoting或共享内存方式进行通信,共享内存需要Win32 API中的 P/Invoking。(可以搜索看看CreateFileMapping 和 MapViewOfFile)
异常处理
任何线程创建范围内try/catch/finally块,当线程开始执行便不再与其有任何关系。考虑下面的程序:
public static void Main() {
try {
new Thread (Go).Start();
}
catch (Exception ex) {
// 不会在这得到异常
Console.WriteLine ("Exception!");
} static void Go() { throw null; }
}
这里try/catch语句一点用也没有,新创建的线程将引发NullReferenceException异常。当你考虑到每个线程有独立的执行路径的时候,便知道这行为是有道理的,
补救方法是在线程处理的方法内加入他们自己的异常处理:
public static void Main() {
new Thread (Go).Start();
} static void Go() {
try {
...
throw null; // 这个异常在下面会被捕捉到
...
}
catch (Exception ex) {
记录异常日志,并且或通知另一个线程
我们发生错误
...
}
从.NET 2.0开始,任何线程内的未处理的异常都将导致整个程序关闭,这意味着忽略异常不再是一个选项了。因此为了避免由未处理异常引起的程序崩溃,try/catch块需要出现在每个线程进入的方法内,至少要在产品程序中应该如此。对于经常使用“全局”异常处理的Windows Forms程序员来说,这可能有点麻烦,像下面这样:
C# 线程问题的更多相关文章
-
[ 高并发]Java高并发编程系列第二篇--线程同步
高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...
-
[高并发]Java高并发编程系列开山篇--线程实现
Java是最早开始有并发的语言之一,再过去传统多任务的模式下,人们发现很难解决一些更为复杂的问题,这个时候我们就有了并发. 引用 多线程比多任务更加有挑战.多线程是在同一个程序内部并行执行,因此会对相 ...
-
多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...
-
Java 线程
线程:线程是进程的组成部分,一个进程可以拥有多个线程,而一个线程必须拥有一个父进程.线程可以拥有自己的堆栈,自己的程序计数器和自己的局部变量,但不能拥有系统资源.它与父进程的其他线程共享该进程的所有资 ...
-
C++实现线程安全的单例模式
在某些应用环境下面,一个类只允许有一个实例,这就是著名的单例模式.单例模式分为懒汉模式,跟饿汉模式两种. 首先给出饿汉模式的实现 template <class T> class sing ...
-
记一次tomcat线程创建异常调优:unable to create new native thread
测试在进行一次性能测试的时候发现并发300个请求时出现了下面的异常: HTTP Status 500 - Handler processing failed; nested exception is ...
-
Android线程管理之ThreadLocal理解及应用场景
前言: 最近在学习总结Android的动画效果,当学到Android属性动画的时候大致看了下源代码,里面的AnimationHandler存取使用了ThreadLocal,激起了我很大的好奇心以及兴趣 ...
-
C#多线程之线程池篇3
在上一篇C#多线程之线程池篇2中,我们主要学习了线程池和并行度以及如何实现取消选项的相关知识.在这一篇中,我们主要学习如何使用等待句柄和超时.使用计时器和使用BackgroundWorker组件的相关 ...
-
C#多线程之线程池篇2
在上一篇C#多线程之线程池篇1中,我们主要学习了如何在线程池中调用委托以及如何在线程池中执行异步操作,在这篇中,我们将学习线程池和并行度.实现取消选项的相关知识. 三.线程池和并行度 在这一小节中,我 ...
-
C#多线程之线程池篇1
在C#多线程之线程池篇中,我们将学习多线程访问共享资源的一些通用的技术,我们将学习到以下知识点: 在线程池中调用委托 在线程池中执行异步操作 线程池和并行度 实现取消选项 使用等待句柄和超时 使用计时 ...
随机推荐
-
poj 3928 树状数组
题目中只n个人,每个人有一个ID和一个技能值,一场比赛需要两个选手和一个裁判,只有当裁判的ID和技能值都在两个选手之间的时候才能进行一场比赛,现在问一共能组织多少场比赛. 由于排完序之后,先插入的一定 ...
-
项目中使用Quartz集群分享--转载
项目中使用Quartz集群分享--转载 在公司分享了Quartz,发布出来,希望大家讨论补充. CRM使用Quartz集群分享 一:CRM对定时任务的依赖与问题 二:什么是quartz,如何使用, ...
-
移动端webapp开发必备知识
移动设备的用户越来越多,每天android手机的激活量都已经超过130万台,所以我们面向移动终端的WebAPP也开始跟进了.本文主要介绍webapp的开发与调试的相关知识和经验,以及给出几种可选的解决 ...
-
(第三章)Java内存模型(上)
一.java内存模型的基础 1.1 并发编程模型的两个关键问题 在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体).通信是指线程之间以何种机制来 ...
-
Java Web(三) 会话机制,Cookie和Session详解
很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因可能是没能好好理解这两种会话机制,所以会一直遗忘,一直重新回过头来学习它,今天好好把他总 ...
-
马拉车算法——求回文串起点hdu3294
#include<bits/stdc++.h> using namespace std; #define maxn 500005 int p[maxn]; ]; int start; in ...
-
导出pdf功能
本程序下载地址: PDF是我们极其常用的文件格式,但对如何生成PDF,个人一直觉得很神秘,其实利用一些公开的PDF库,我们就可以直接生成PDF文件,而不用关注PDF文件的内部细节.我知道的PDF库有如 ...
-
board_key.h/board_key.c
/******************************************************************************* Filename: board_key ...
-
struts2 contextMap
一.contextMap中的数据操作 root根:List 元素1 元素2 元素3 元素4 元素5 contextMap:Map key value application Map key value ...
-
MySQl创建用户和授权
权限的管理: 如何创建用户和密码 给当前的用户授权 移除当前用户的权限 首先进去到mysql数据库下: mysql> use mysql Database changed 其次, 对新用户进行增 ...