首页 > 代码库 > 在Window环境下多线程与CPU资源分配原则
在Window环境下多线程与CPU资源分配原则
首先强调一下是在windowNT环境下,linux是完全不同的效果,这取决于操作系统的CPU资源分配算法。
背景介绍:
如果有三个(或者更多)线程异步执行各自的算法(不知道是哪个SB写的算法,相当耗资源),那么这三个线程的CPU资源是如何分配的呢?
先上一段代码和效果图
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 int i = 0; 6 while (i<30) 7 { 8 new Thread(new ParameterizedThreadStart(o => 9 {10 Console.WriteLine("*************************");11 i++;12 })).Start();13 new Thread(new ParameterizedThreadStart(o =>14 {15 Console.WriteLine("++++++++++++++++++++++++");16 i++;17 })).Start();18 new Thread(new ParameterizedThreadStart(o =>19 {20 while (i < 30)21 {22 Console.WriteLine(i.ToString());23 i++;24 Thread.Sleep(0);25 }26 })).Start();27 }28 Console.Read();29 30 }31 }
如果将第24行注释,结果截然不同,那么ThreadSleep(0)的作用就明显了,虽然从代码逻辑上理解应该是线程Sleep 0 毫秒,想多没做任何事情,对于windows操作系统截然不同,这句话的意思系统理解为 这次不参与cpu资源竞争。
因为window的cpu资源分配时按照“民主”的方式进行分配的,所有需要资源的线程都在系统中排队等候,系统会给他们分级,哪一个最需要资源,哪一个最不需要资源,相当于给每一个资源申请者添加了一个权值(如果申请者是个美女,权值自然就高)。当上一个使用者释放cpu之后,系统会安排下一个去使用cpu(说了这么多,也没见到与linux有啥区别,但是下面就不一样了),当使用者占用CPU之后,一定要占用着主动释放,否则cpu将一直被占用。
所以,在做多线程的时候应该要注意资源的释放。
如有错误,望指正!
在Window环境下多线程与CPU资源分配原则
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。