博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Window环境下多线程与CPU资源分配原则
阅读量:6712 次
发布时间:2019-06-25

本文共 1524 字,大约阅读时间需要 5 分钟。

首先强调一下是在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将一直被占用。

所以,在做多线程的时候应该要注意资源的释放。

 

如有错误,望指正!

 

转载于:https://www.cnblogs.com/xiaoch/p/3965767.html

你可能感兴趣的文章
EMC与NetApp NAS对比
查看>>
linux系统的启动流程
查看>>
CRLF注入漏洞
查看>>
(一) virtualenv虚拟环境安装
查看>>
利用ssh+rsync+inotify实现数据的异地实时同步
查看>>
Android官方开发文档Training系列课程中文版:分享简单数据之从其它APP接收简单数据...
查看>>
IN2Windows: Case of the Unexplained Access Denied
查看>>
OpenSSL将于9月22日发布多个漏洞补丁
查看>>
大数据助推新型智库建设
查看>>
新加坡欲重组通信和媒体管制机构
查看>>
微信公众号最新数据解读,三分之一停更成僵尸号
查看>>
《CCNP ROUTE 300-101学习指南》——2.2节构建EIGRP拓扑表
查看>>
《为自己工作——世界顶级设计师成功法则》目录—导读
查看>>
Libreboot 项目向开源社区示好和致歉
查看>>
《CMYK 2.0——设计师色彩管理手册》—第1章1.3节副作用
查看>>
java.util.concurrent.locks.LockSupport
查看>>
红帽加入 Node.js 基金会白金会员
查看>>
《OpenGL编程指南》一2.7 独立的着色器对象
查看>>
Ionic 3.4.2 发布,漂亮的 HTML5 移动应用框架
查看>>
Linux Kernel 4.9-rc8,4.9 分支最后一个候选版
查看>>