C#中Thread的优先级不是决定每个线程被执行顺序。它决定了线程可以占用CPU的时间

Thread的优先级设置是自带的枚举类型"ThreadPriority"

 [ComVisible(true)]
public enum ThreadPriority
{
//
// 摘要:
// System.Threading.Thread 可以安排在具有任何其他优先级的线程之后。
Lowest = ,
//
// 摘要:
// System.Threading.Thread 可以安排在使用的线程之后 Normal 优先级之前 Lowest 优先级。
BelowNormal = ,
//
// 摘要:
// System.Threading.Thread 可以安排在使用的线程之后 AboveNormal 优先级之前 BelowNormal 优先级。 线程所具有的
// Normal 默认优先级。
Normal = ,
//
// 摘要:
// System.Threading.Thread 可以安排在使用的线程之后 Highest 优先级之前 Normal 优先级。
AboveNormal = ,
//
// 摘要:
// System.Threading.Thread 可以安排在具有任何其他优先级的线程之前。
Highest =
}

看下面两个线程的例子

class Program
{
static void Main(string[] args)
{
Thread thread1 = new Thread(PrintCount);
Thread thread2 = new Thread(PrintCount);
thread1.Priority = ThreadPriority.Highest;
thread2.Priority = ThreadPriority.Lowest;
thread1.Start();
thread2.Start();
Thread.Sleep();
thread1.Abort();
thread2.Abort();
Console.Read();
}
private static void PrintCount()
{
int flag = ;
while (true)
{
Console.WriteLine($"{Thread.CurrentThread.Name}priority{Thread.CurrentThread.Priority}count:{flag++ }");
}
}
}

我们运行了两个子线程,第一个线程设置为了最高级,第二个则是最低级,在两秒内,我们看看下面的结果

第一个设置为高级的线程在两秒内运行了912次,而设置为低级的则运行了645次

因为我们计算机性能都比较好了,基本都是几核的。接下来我们稍微修改下代码,我们将所有的线程都放知道我们系统的第一个CPU上运行

来看看运行状况。

class Program
{
static void Main(string[] args)
{
Thread thread1 = new Thread(PrintCount);
Thread thread2 = new Thread(PrintCount);
thread1.Priority = ThreadPriority.Highest;
thread2.Priority = ThreadPriority.Lowest;
thread1.Start();
thread2.Start();
Process.GetCurrentProcess().ProcessorAffinity = new IntPtr();//设置到第一个cup上运行
Thread.Sleep();
thread1.Abort();
thread2.Abort();
Console.Read();
}
private static void PrintCount()
{
int flag = ;
while (true)
{
Console.WriteLine($"{Thread.CurrentThread.Name}priority{Thread.CurrentThread.Priority}count:{flag++ }");
}
}

我们看看两秒内两个线程的运行情况

由此可见,低等级的次数更少了,这是由于只使用了一个CPU核心,所以它大多时间都是在处理高等级的线程,更少的时间处理低等级。这里可以看到差距更加的明显了。

C# Thread2——线程优先级的更多相关文章

  1. 【多线程】线程优先级 Priority

    线程优先级 Priority Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度 器按照优先级决定应该调度哪个线程来执行. 线程的优先级用数字表示,范围从1~10. Thre ...

  2. 线程优先级抢占实验【RT-Thread学习笔记 3】

    同时处于就绪状态的线程,优先级高的先执行. 高优先级就绪时,低优先级任务让出CPU,让高优先级任务先执行. 创建两个任务函数: //线程优先级抢占 void thread1_entry(void *p ...

  3. Java线程优先级及守护线程(二)

    简述 在操作系统中,线程是可以划分优先级的,优先级较高的线程,得到CPU优先执行的几率就较高一些.设置线程的优先级,有助于帮助线程规划期选择下一个哪一个线程优先执行,但是线程优先级高不代表一定会优先执 ...

  4. Cocos2dx中线程优先级

    Cocos2dx中线程优先级问题 不论是ios还是android,遇到耗时的任务都要另起线程处理,否则程序不能及时用户的反馈.游戏中如果一圈循环不能在1/frameRate(帧率是30则1/30)秒内 ...

  5. <<Windows via C/C++>>学习笔记 —— 线程优先级【转】

    转自:http://www.cnblogs.com/wz19860913/archive/2008/08/04/1259807.html 每个线程都有一个“优先级”,范围是0-31,0为最低优先级,3 ...

  6. Java多线程系列--“基础篇”10之 线程优先级和守护线程

    概要 本章,会对守护线程和线程优先级进行介绍.涉及到的内容包括:1. 线程优先级的介绍2. 线程优先级的示例3. 守护线程的示例 转载请注明出处:http://www.cnblogs.com/skyw ...

  7. Android线程优先级设置方法技巧

    对于Android平台上的线程优先级设置来说可以处理很多并发线程的阻塞问题, 比如很多无关紧要的线程会占用大量的CPU时间,虽然通过了MultiThread来解决慢速I/O但是合理分配优先级对于并发编 ...

  8. java后台进程和线程优先级

    1. 后台线程:处于后台运行,任务是为其他线程提供服务.也称为“守护线程”或“精灵线程”.JVM的垃圾回收就是典型的后台线程. 特点:若所有的前台线程都死亡,后台线程自动死亡. 设置后台线程:Thre ...

  9. EPROCESS 进程/线程优先级 句柄表 GDT LDT 页表 《寒江独钓》内核学习笔记(2)

    在学习笔记(1)中,我们学习了IRP的数据结构的相关知识,接下来我们继续来学习内核中很重要的另一批数据结构: EPROCESS/KPROCESS/PEB.把它们放到一起是因为这三个数据结构及其外延和w ...

随机推荐

  1. vue梳理(1)

    单选/复选 <div id="app"> <!--checkbox需要给每个复选双向绑定同一个数据,并添加value值, 点击某个复选时就会把该复选的value值 ...

  2. Python核心技术与实战——五|条件与循环

    我们在前面学习了列表.元组.字典.集合和字符串等一系列Python的基本数据结构类型,下就需要把这一个个基本的数据串在一起了,这就要用到我们今天要讲的东西——”条件与循环“. 一.条件语句 条件语句的 ...

  3. linux find 用法和常见用例

    Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; 本人qq群也有许多 ...

  4. zrender的线性渐变

    线性渐变 官方文档是这样写的 实际运用是酱紫的 在把颜色放背景中 小白一枚,路过大神,多多指教.欢迎留下宝贵意见

  5. Django模板自定义标签和过滤器,模板继承(extend),Django的模型层

    上回精彩回顾 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 Quer ...

  6. USACO Overplanting ( 线段树扫描线 )

    题意 : 在二维平面上给出 N 个矩形,问你所有矩形构成的图案的面积是多少(相互覆盖的地方只计算一次) 分析 :  求矩形面积并可以模拟来做,不过使用线段树来辅助做扫描线可以更高效地求解 扫描线顾名思 ...

  7. HDU 4758 Walk Through Squares ( Trie图 && 状压DP && 数量限制类型 )

    题意 : 给出一个 n 行.m 列的方格图,现从图左上角(0, 0) 到右下角的 (n, m)走出一个字符串(规定只能往下或者往右走),向右走代表' R ' 向下走则是代表 ' D ' 最后从左上角到 ...

  8. Leetcode 4. Median of Two Sorted Arrays(中位数+二分答案+递归)

    4. Median of Two Sorted Arrays Hard There are two sorted arrays nums1 and nums2 of size m and n resp ...

  9. 纯CSS写的各种小三角和小箭头

    头朝下的小三角 width:0; height:0; border:50px solid transparent; //所有border都是透明的, border-top-color:black; / ...

  10. nvm 管理 node 版本

    nvm 有 Mac 版本 num 亦有 windows 版本(可以搜索 nvm for windows) 安装后 运行 nvm v 可查看版本 运行 nvm install latest 安装最新版本 ...