多线程基础知识

【单核处理器和多核处理器的多线程】

单核处理器: 为每个线程分配时间片。来模拟并发

多核处理器:一核一线程,真正实现并发

 

【标志】

线程一致性,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.异步等待,待完成后执行回调操作

 

posted @   RookieCoderAdu  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2020-10-21 js里面的引用传递(数组赋值)
点击右上角即可分享
微信分享提示