【单核处理器和多核处理器的多线程】
单核处理器: 为每个线程分配时间片。来模拟并发
多核处理器:一核一线程,真正实现并发
【标志】
线程一致性,IsAlive就为true,否则为false
【线程结束的条件】
传入线程的委托结束了执行。
【特性】
线程一旦结束,就无法重启
每个线程都有一个Name,只能设置一次,再次修改就会报错
【线程状态属性】
ThreadState
//返回线程状态 public static ThreadState GetThreadState(ThreadState state) { return state&(ThreadState.Unstarted | ThreadState.WaitSleepJoin|ThreadState.Stopped); }
【Join】
等待当前线程结束之后再进行其他线程的事情,这里相当于阻塞主线程
用法是
thread.Join()
Join还可以在里面加上时间,表示在设置的时间内进程内的委托是否执行完
实例语句
public static TimeSpan span=new TimeSpan(0,0,1);
if (t.Join(span)) { Console.WriteLine("Thread Terminated"); } else { Console.WriteLine("Timeout has elapsed"); }
这里span是我设置的时间,t为一个线程,里面是休眠方法,休眠的时间超过了我设置的span,所以会执行下面的语句
【阻塞】
如果某线程因某种原因暂停,则认为被阻塞。比如Sleep和Join
判断是否阻塞
bool isBlock=(thread.ThreadState & ThreadState.WaitSleepJoin)!=0
【上下文切换】
当线程阻塞或者解除阻塞的时候,会进行上下文的切换。会有一定的开销,通常1~2ms。
【IO密集和CPU密集】
IO-Bound:一个花费大量时间等待某事发生的操作
CPU-Bound:一个花费大量时间进行CPU密集型工作的操作
【IO密集型的工作方式】
1.在当前线程上同步的等待
Console.WriteLine/Sleep/Join
2.异步等待,待完成后执行回调操作
标签:Join,阻塞,基础知识,线程,span,多线程,ThreadState From: https://www.cnblogs.com/AduBlog/p/16814630.html