一、进程与线程
1、进程
一个正在运行的程序的实例,是系统进行调度和资源分配的一个独立单位。
进程由两部分能组成:
(1)操作系统用来管理进程的内核对象。内核对象是系统的一种资源,系统对象一旦产生,任何应用程序都可以开启并使用该对象。系统给予内核对象一个计数值作为管理之用。
(2)操作系统用来管理地址的空间。它包含所有可执行模块或 DLL 模块的代码和数据。它还包含动态内存分配的空间,如线程堆栈和堆栈分配空间。
进程分为系统进程和用户进程。程序是静止的,二进程是动态的。
2、线程
一段完成某个特定功能的代码,是程序中的一个执行流。
线程由两个部分组成:
(1)操作系统用来管理线程的内核对象。内核对象也是系统用来存放线程统计信息的地方。
(2)另一个是线程的堆栈。它用于维护线程在执行代码时需要的所有函数的参数的局部变量。
线程是在它的进程地址空间中执行代码的,并且在地址的进程空间中对数据进行操作。
线程分为用户界面线程和工作线程。
1、线程与进程的比较
多进程是指在操作系统中能同时运行多个任务程序。
(1)进程的特点是允许计算机同时运行两个或更多的程序。
(2)在基于线程的多任务处理环境中,线程是最小的处理单位。
(3)多个进程的内部数据和状态都是完全独立的,而多线程共享一块内存空间和一组系统资源,有可能互相影响。
(4)线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比进程的切换负担要小。
二、C# 中多线程的开发
1、线程操作
System.Threading.Thread
表-Thread 类的常用属性
属性名 | 描述 |
---|---|
CurrentThread | 只读属性,获取当前正在运行的线程 |
IsAlive | 判断线程是否处于活动状态 |
IsBackground | 获取或设置一个值,该值指示某个线程是否为后台线程 |
IsThreadPoolThread | 获取一个值,该值指示线程是否属于托管线程池 |
Name | 获取或设置线程的名称 |
Priority | ThreadPriority 枚举类型,代表线程的优先级,如:Normal、AboveNormal、BelowNormal、Highest、Lowest |
ThreadState | ThreadState 枚举类型,代表当前线程的状态,如:Unstarted、Running、WaitSleepJoin、Stopped、AbortRequested、Susppended、Aborted 等 |
表-Thread 类的常用方法
方法名 | 描述 |
---|---|
GetDomain() | 返回当前线程所在的应用程序域 |
GetDomainID() | 返回当前线程所在的应用程序域的 ID |
Start() | 启动线程的执行 |
Suspend() | 挂起线程,或者如果线程已挂起,则不起作用 |
Resume() | 继续已挂起的线程 |
Interrupt() | 终止处于 Wait 或者 Sleep 或者 Join 线程状态的线程 |
Join() | 阻塞调用线程,直到某个线程终止时为止 |
Sleep() | 将当前线程阻塞指定的毫秒数 |
Abort() | 终止一个线程的运行 |