在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将一直被占用。

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

如有错误,望指正!

时间: 2024-10-24 01:49:28

在Window环境下多线程与CPU资源分配原则的相关文章

window环境下将solr6.3部署到tomcat中

1.我下载的solr是6.3版本的,需要jdk1.8及以上,tomcat8 JDK1.8的下载地址:http://www.Oracle.com/technetwork/Java/javase/downloads/jdk8-downloads-2133151.html tomcat8的下载地址:http://tomcat.apache.org/download-80.cgi 注意:Window环境下下载的都是zip包 2.安装jdk,这里就省略了,参考其他文章 3.solr6.3发布版本本身就有一

shell文件管理jenkins构建过程---window环境下报错:找不到shell文件

window环境下报错:找不到shell文件.查看jenkins本地文件,可以查看到shell文件: 检查job配置: 发现使用的是Execute shell; 这个项目只能在liunx下使用,在window环境只能使用 Execute Windows batch command

window环境下glog的安装

window环境下glog的安装 分类: c++2014-09-23 14:12 32人阅读 评论(0) 收藏 举报 下载后解压,利用Visual Studio打开google-glog.sln.生成解决方案 安装: 方法一:将libglog.dll和libglog.lib文件,拷贝文件到你的工程文件夹下,并拷贝src\windows\下的glog目录到你的工程文件下. 方法二:你也可以将这两个文件拷贝到系统文件夹下,实现全局访问. 1. 将libglog.dll拷贝到C:\Program Fi

window 环境下vb &nbsp; 磁盘空间监控脚本!

Set objFSO = CreateObject ("Scripting.FileSystemObject") Set colDrives = objFSO.Drives Dim msg For Each objDrive in colDrives If objDrive.IsReady and  objDrive.DriveLetter ="D" and  int(objDrive.FreeSpace/(1024*1024*1024))<=400 Then

window 环境下vb 监控脚本!

文件监控 DIM  strDate DIM  strDatestringOld DIM  strPath01 , strPath02,strPath03 DIM fs DIM  Textbody strDate = Date strDatestringOld=Year(strDate) & Right("0" & Month(strDate),2) & Right("0" & Day(strDate),2)&".ra

window环境下npm install node-sass报错

最近准备想用vue-cli初始化一个项目,需要sass-loader编译: 发现window下npm install node-sass和sass-loader一直报错, window 命令行中提示我全局安装 node-gyp ,有些提示好像是本地找不到python, 于是我按照提示安装node-gyp node-gyp是一个用Node.js编写的跨平台命令行工具,用于编译Node.js的本地插件模块. node-gyp node-gyp官方网址https://www.npmjs.com/pac

nodejs 修改端口号 process.env.PORT(window环境下)

各个环境下,nodejs设置process.env.PORT的值的命令,如下1.linux环境下: PORT=1234 node app.js 使用上面命令每次都需要重新设置,如果想设置一次永久生效,使用下面的命令. export PORT=1234 node app.js 2.windows下面按照顺序这样进行: set PORT=1234 node app.js window环境下,nodejs启动配置文件,基于package.json文件 { "name": "blog

Linux环境下进程的CPU占用率

阿里云服务器网站:https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=qqwovx6h 文字来源:http://www.samirchen.com/linux-cpu-performance/ 1.Linux 环境下查看 CPU 信息 1.1.查看 CPU 详细信息 通过 cat /proc/cpuinfo 命令,可以查看 CPU 相关的信息: [[email protected]~]$cat/proc/cpuinfo

elasticsearch在window环境下的安装

今日在学习lucene的时候,看到书中有介绍Elasticsearch,Elasticsearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口,Elasticsearch是用Java开发的.现在就记录一下我在windows环境下安装Elasticsearch的步骤. 第一步,先去Elasticsearch官方网站下载window环境的所需要的文件,windows环境下载ZIP的压缩包,下载完成后解压放到固定的目录下.Elastic