本节书摘来自华章出版社《C#多线程编程实战(原书第2版)》一书中的第1章,第1.1节,作者(美)易格恩·阿格佛温(Eugene Agafonov),黄博文 黄辉兰 译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
第1章
线 程 基 础
本章将涵盖C#中使用线程的基本操作。
你将学到以下内容:
使用C#创建线程
暂停线程
线程等待
终止线程
检测线程状态
线程优先级
前台线程和后台线程
向线程传参
使用C#中的lock关键字
使用Monitor类锁定资源
处理异常
1.1 简介
过去普通计算机只有一个计算单元,不能同时执行多个计算任务。然而操作系统却已经可以同时运行多个应用程序,即实现了多任务的概念。为了防止一个应用程序控制CPU而导致其他应用程序和操作系统本身永远被挂起这一可能情况,操作系统不得不使用某种方式将物理计算单元分割为一些虚拟的进程,并给予每个执行程序一定量的计算能力。此外,操作系统必须始终能够优先访问CPU,并能调整不同程序访问CPU的优先级。线程正是这一概念的实现。可以认为线程是一个虚拟进程,用于独立运行一个特定的程序。
请记住线程会消耗大量的操作系统资源。多个线程共享一个物理处理器将导致操作系统忙于管理这些线程,而无法运行程序。
因此,虽然有可能提高计算机的处理器能力,使得计算机每秒钟能执行越来越多的命令,但是使用线程通常是一个操作系统任务,试图在单核CPU上并行执行计算任务是没有意义的,因为这比顺序运行会花费更多的时间。然而,当处理器拥有多核时,过去的应用程序则不能使用这个优势,因为它们只使用了一个处理核心。
为了有效地利用现代处理器的计算能力,使用某种方式让程序能使用不止一个处理核心是非常重要的。这需要组织多个线程间的通信和相互同步。
本章中的内容将关注于使用C#语言执行一些非常基本的线程操作。我们将介绍线程的生命周期,其包括创建线程、挂起线程、线程等待,以及中止线程。然后我们会介绍一些基本的线程同步技术。