在Window环境下多线程与CPU资源分配原则
2017-07-11 16:34
405 查看
首先强调一下是在windowNT环境下,linux是完全不同的效果,这取决于操作系统的CPU资源分配算法。
背景介绍:
如果有三个(或者更多)线程异步执行各自的算法(不知道是哪个SB写的算法,相当耗资源),那么这三个线程的CPU资源是如何分配的呢?
先上一段代码和效果图
如果将第24行注释,结果截然不同,那么ThreadSleep(0)的作用就明显了,虽然从代码逻辑上理解应该是线程Sleep 0 毫秒,想多没做任何事情,对于windows操作系统截然不同,这句话的意思系统理解为 这次不参与cpu资源竞争。
因为window的cpu资源分配时按照“民主”的方式进行分配的,所有需要资源的线程都在系统中排队等候,系统会给他们分级,哪一个最需要资源,哪一个最不需要资源,相当于给每一个资源申请者添加了一个权值(如果申请者是个美女,权值自然就高)。当上一个使用者释放cpu之后,系统会安排下一个去使用cpu(说了这么多,也没见到与linux有啥区别,但是下面就不一样了),当使用者占用CPU之后,一定要占用着主动释放,否则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( 4000 "++++++++++++++++++++++++"); 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资源分配原则
- Java基础中环境变量的配置以及Java的内存资源调用分配机制
- linux进程cpu资源分配命令nice,renice,taskset
- java中HashMap在多线程环境下引起CPU100%的问题解决(转)
- 在多核操作系统中,java多线程不能被指定到具体cpu上,而是由操作系统自动分配
- c/c++多线程模拟系统资源分配(并通过银行家算法避免死锁产生)
- 在Java应用程序中动态分配CPU资源
- LXC linux容器简介——在操作系统层次上为进程提供的虚拟的执行环境,限制其使用的CPU和mem等资源,底层是linux内核资源管理的cgroups子系统
- Feekood开发环境介绍(3)-- 资源权限分配
- java中HashMap在多线程环境下引起CPU100%的问题解决
- 编写 三个类 ticket,sealWindow,ticketSealCenter,代表票信息,售票窗口,售票中心, 售票中心分配一定数量的票(多个窗口实现多线程售票)
- 如何在Java应用程序中动态分配CPU资源
- C++ windows多线程 线程描述了进程内代码的执行路径。进程中同时可以有多个线程在执行,为了使他们能够同时运行,操作系统为每个线程轮流分配CPU时间片,为了充分地利用CPU提高软件产品的性能,一
- 多线程的目的是为了最大限度的利用CPU资源。
- 多核多线程——pthread_setaffinity_np,cpulimit分析CPU资源对应用程序的影响
- xen环境下的内存与CPU分配:性能优化
- Xen环境下的内存与CPU分配:性能优
- Xen环境下的内存与CPU分配:性能优化
- linux进程cpu资源分配命令nice,renice,taskset
- 常用的资源分配策略有哪两种?在每一种策略中,资源请求队列的排序原则是什么?