.NET 线程技术基础

转载自 邵志东 多线程编程

线程基本概念

• 线程是程序执行的基本原子单位. 一个进程可以由多个线
程组成.
• 每个线程都维护异常处理程序、调度优先级和一组系统用
于在调度该线程前保存线程上下文的结构。线程上下文包
括为使线程在线程的宿主进程地址空间中无缝地继续执行
所需的所有信息,包括线程的CPU 寄存器组和堆栈。
• 在分布式编程中,正确使用线程能够很好的提高应用程序
的性能及运行效率.实现原理是将一个进程分成多个线
程,然后让它们并发异步执行,来提高运行效率.
• 并发执行并不是同时执行(占有CPU),任意时刻还是只能
有一个线程占用CPU,只不过是它们争夺CPU频繁一些,
感觉到他们似乎都在运行.

 

什么时候用线

• 一般情况下,如果多个线程在执行时都要抢占某
一个资源或某几个资源,则最好不用异步线程执
行.因为它们是并发执行,很可能同时争夺某个资
源有CPU,这时要么执行资源分配算法(比如要判
断哪个线程优先级高,这要花费时间),或者是按时
间片算法(这样要付出轮询CUP/交接/让出CPU
所需的时间).
• 如果多个线程所需要的系统资源是比较均匀的,
这时完全可以让它们异步并发执行,

 

使用线程的缺点

• 统将为进程和线程所需的上下文信息使用内存。
因此,可以创建的进程、AppDomain 对象和线
程的数目会受到可用内存的限制。
• 跟踪大量的线程将占用大量的处理器时间。如果
线程过多,则其中大多数线程都不会产生明显的
进度。如果大多数当前线程处于一个进程中,则
其他进程中的线程的调度频率就会很低。
• 使用许多线程控制代码执行非常复杂,并可能产
生许多错误。
• 销毁线程需要了解可能发生的问题并对那些问题
进行处理。

 

 

System.Threading
• 提供一些使得可以进行多线程编程的类和
接口。此命名空间包括管理线程组的
ThreadPool 类、使得可以在指定的时间后
调用委托的Timer 类以及用于同步互斥线
程的Mutex 类。System.Threading 还提
供用于线程调度、等待通知和死锁解析的
类。
• using System.Threading;

 

 

Thread 类
• a.启动线程:即新建并启动一个线程:
– Thread thread1 = new Thread(new ThreadStart( Count));其中的
Count 是将要被新线程执行的函数。
• b.杀死线程
– 在杀死一个线程前最好先判断它是否还活着(通过IsAlive 属
性),然后就可以调用Abort 方法来杀死此线程。
• c.暂停线程
– 即让一个正在运行的线程休眠一段时间。如thread.Sleep(1000);
就是让线程休眠1秒钟。
• d.优先级
– Thread类中ThreadPriority属性,它用来设置优先级,但不能保证
操作系统会接受该优先级。一个线程的优先级可分为5种:
Normal, AboveNormal, BelowNormal, Highest, Lowest。
• e.挂起线程
– Thread类的Suspend方法用来挂起线程,直到调用Resume,此
线程才可以继续执行。如果线程已经挂起,那就不会起作用。
• f.恢复线程
– Resume方法用来恢复已经挂起的线程,以让它继续执行,如果线
程没挂起,也不会起作用。

 

 

Thread
• 一个线程的方法不包含任何参数,同时也不返回任何值。
它的命名规则和一般函数的命名规则相同。它既可以是静
态的(static)也可以是非静态的(nonstatic)。当它执
行完毕后,相应的线程也就结束了,其线程对象的IsAlive
属性也就被置为false了。
• .Net的公用语言运行时(CLR)能区分两种不同类型的线
程:前台线程和后台线程。这两者的区别就是:应用程序
必须运行完所有的前台线程才可以退出;而对于后台线
程,应用程序则可以不考虑其是否已经运行完毕而直接退
出,所有的后台线程在应用程序退出时都会自动结束
• 一个线程是前台线程还是后台线程可由它的IsBackground
属性来决定。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值