在这篇文章中,我会总结C#中线程的基础知识。应该算是比较完全了吧。以后忘记的时候可以回过头来看看。今年这情况,有点难受,感觉大家都不好过。生活还得继续啊。
一、托管线程处理基本知识
在过去,CPU只有一个核心,不能同时执行多个计算任务。然而操作系统却可以同时运行多个应用程序,即实现了多任务的概念。为了防止一个应用程序控制CPU而导致其它应用程序和操作系统本身永远被挂起这一可能情况,操作系统不得不使用某种方式将物理计算单元分割为一些虚拟的进程,并给予每个执行程序一定量的计算能力。线程正是这一概念的实现,可以认为线程是一个虚拟进程 ,可以独立运行一个特定的程序。
线程会消耗大量的操作系统资源,多个线程共享一个物理处理器将会导致系统忙于管理这些线程,而无法运行程序。因此,试图在单核CPU上并行执行计算任务是没有意义的,因为这比顺序运行花费更多的时间。现在基本上已经不会再碰到单核CPU了,当你创建一个线程时,操作系统会自动分配它到哪个核心上去运行。使用多线程可以提高应用程序的响应能力,并利用多处理器或多核系统提高应用程序吞吐量。
进程就是正在执行的程序 。 操作系统使用进程来分隔正在执行的应用程序。 线程是操作系统向其分配处理器时间的基本单元 。 每个线程具有计划优先级,而且维护系统用于保存线程执行暂停时线程上下文的一组结构。 线程上下文包含线程顺畅继续执行所需的全部信息,包括线程的一组 CPU 寄存器和堆栈。 多个线程可在进程上下文中运行。 进程的所有线程共享其虚拟地址空间。 线程可执行任意部分的程序代码,包括其他线程正在执行的部分。
在这篇文章中,仍然介绍的是传统线程的使用方法,从.Net Framework4起,推荐使用TPL和PLINQ来创建和使用多线程。TPL和PLINQ依赖System.Thread.ThreadPool线程。
二、创建线程
1 static void Main(string[] args) 2 { 3 Thread t = new Thread(PrintTime); 4 t.Start(); 5 } 6 7 static void PrintTime() 8 { 9 Console.WriteLine(DateTime.Now.ToShortTimeString()); 10 }
正在执行中的程序实例可被称为一个进程,进程由一个或多个线程组成。这意味着,当程序运行时,始终有一个执行代码的主线程。
上述的示例代码创建一个线程来运行PrintTime()方法。