前言

有时候我们希望某个线程更加重要,希望让其先运行的话。c#为我们提供了线程修改优先级。但是这样的效果有多大呢?

正文

直接放代码:

static void Main(string[] args)
{
Console.WriteLine($" current thread priority:{Thread.CurrentThread.Priority }");
Console.WriteLine("Running on all cores available");
RunThreads();
Thread.Sleep(TimeSpan.FromSeconds(2));
Console.WriteLine("Rinning on single core");
Process.GetCurrentProcess().ProcessorAffinity = new IntPtr(1);
RunThreads();
Thread.Sleep(TimeSpan.FromSeconds(5));
Console.ReadLine();
}
static void RunThreads()
{
var simple = new SampleTread();
var threadOne = new Thread(simple.countNumber);
threadOne.Name = "ThreadOne";
var ThreadTwo = new Thread(simple.countNumber);
ThreadTwo.Name = "ThreadTwo";
threadOne.Priority = ThreadPriority.Highest;
ThreadTwo.Priority = ThreadPriority.Lowest;
threadOne.Start();
ThreadTwo.Start();
Thread.Sleep(TimeSpan.FromSeconds(2));
simple.Stop();
}
class SampleTread
{
private bool _isStopped = false;
public void Stop()
{
_isStopped = true;
}
public void countNumber()
{
long counter = 0;
while (!_isStopped)
{
counter++;
}
Console.WriteLine($"{Thread.CurrentThread.Name} with" + $"{ Thread.CurrentThread.Priority,11}" + $"has a count={counter:13:No}");
}
}

结果

我们发现两次运行的结果并不同:

上诉结果是因为我们有多个核,即使我们设置了优先级在多个核上也是并行的。

而我使用Process.GetCurrentProcess().ProcessorAffinity = new IntPtr(1);

让进程运行在单核上,我们发现其实一直在等待的。

这是因为一直在执行threadOne,等线程超时了,然后是ThreadTwo ,只有当操作系统让他们超时了才让他们退出。

而我发现在单核上,基本是高优先级先输出。

我也把启动顺序换了。

static void RunThreads()
{
var simple = new SampleTread();
var threadOne = new Thread(simple.countNumber);
threadOne.Name = "ThreadOne";
var ThreadTwo = new Thread(simple.countNumber);
ThreadTwo.Name = "ThreadTwo";
threadOne.Priority = ThreadPriority.Highest;
ThreadTwo.Priority = ThreadPriority.Lowest;
threadOne.Start();
ThreadTwo.Start();
Thread.Sleep(TimeSpan.FromSeconds(2));
simple.Stop();
}

得到的同样是:

先不说100%,在单核上是有一些作用的,但是多线程在单核上跑意义多大呢?是可以调节在每个单核上的竞争性。

总结

这种设置优先级的是适合高并发调优的,因为高并发在单核上还是还是存在竞争性的,而不适合两个线程之间去确定谁先执行。

c# 线程的优先级的更多相关文章

  1. C#夯实基础之多线程三:线程的优先级

    一.为什么需要优先级--线程调度的问题 在现实生活中,优先级是一个很常见的现象:在火车站,如果你是孕妇,你是可以走进站中的专门绿色通道的,可以提前上火车以免拥挤:火警119匪警110出警的时候,都是人 ...

  2. java 22 - 6 多线程之线程调度和设置线程的优先级

    线程调度 假如我们的计算机只有一个 CPU,那么 CPU 在某一个时刻只能执行一条指令,线程只有得到 CPU时间片,也就是使用权,才可以执行指令. 那么Java是如何对线程进行调用的呢? 线程有两种调 ...

  3. java 线程的优先级

    //线程的优先级 //线程1 class xc1 implements Runnable{ public void run(){ for(int i=0;i<20;i++){ System.ou ...

  4. java笔记--查看和修改线程的优先级

    查看和修改线程的优先级 java中每一个线程都有优先级属性,在默认情况下,新建的线程的优先级与创建该线程的线程优先级相同.每当线程调度器选择要运行的线程时,通常选择优先级较高的线程. 注:线程的优先级 ...

  5. Android(java)学习笔记63:线程的优先级

    1. Java线程的优先级从1到10级别,值越大优先级越高线程默认优先级是5.值越大优先级越高 (1) 继承自Thread类创建线程类: package cn.itcast_04; public cl ...

  6. Java 并发 线程的优先级

    Java 并发 线程的优先级 @author ixenos 低优先级线程的执行时刻 1.在任意时刻,当有多个线程处于可运行状态时,运行系统总是挑选一个优先级最高的线程执行,只有当线程停止.退出或者由于 ...

  7. JAVA之旅(十五)——多线程的生产者和消费者,停止线程,守护线程,线程的优先级,setPriority设置优先级,yield临时停止

    JAVA之旅(十五)--多线程的生产者和消费者,停止线程,守护线程,线程的优先级,setPriority设置优先级,yield临时停止 我们接着多线程讲 一.生产者和消费者 什么是生产者和消费者?我们 ...

  8. Linux-pthread如何设置线程的优先级

    设置线程优先级的函数: int pthread_setschedparam(pthread_t target_thread, int policy, const struct sched_param ...

  9. 7.线程id,优先级讲解

    1.线程id可以通过Thread对象的getId()方法得到,在线程出了问题,为什么CPU占用这么高的时候,查的时候我们可以在堆栈信息中找到对应线程,然后干掉该线程就好! 2.而线程对象的getNam ...

  10. mfc 线程的优先级

    知识点:  线程优先级  获取当前线程句柄  线程优先级设置  线程优先级变动  线程优先级获取 一.线程优先级(Thread priority ) 简单的说就是(线程)的优先级越高,那么就 ...

随机推荐

  1. 【Java Spring Cloud 实战之路】- 使用Nacos和网关中心的创建

    0. 前言 在上一节中,我们创建了一个项目架构,后续的项目都会在那个架构上做补充. 1. Nacos 1.1 简介 Nacos可以用来发现.配置和管理微服务.提供了一组简单易用的特性集,可以快速实现动 ...

  2. Java实现 蓝桥杯VIP 算法训练 特殊的数字四十

    问题描述 1234是一个非常特殊的四位数,因为它的各位数之和为10,编程求所有这样的四位十进制数. 输出格式 按从小到大的顺序输出满足条件的四位十进制数.每个数字占用一行. public class ...

  3. Java实现蓝桥杯历届试题区间移位

    问题描述 数轴上有n个闭区间D1,-,Dn.其中区间Di用一对整数[ai, bi]来描述,满足ai < bi.已知这些区间的长度之和至少有10000.所以,通过适当的移动这些区间,你总可以使得他 ...

  4. Java实现蓝桥杯正则切分

    java中提供了对正则表达式的支持. 有的时候,恰当地使用正则,可以让我们的工作事半功倍! 如下代码用来检验一个四则运算式中数据项的数目,请填写划线部分缺少的代码. 注意:只填写缺少代码,不要写任何多 ...

  5. java代码(6) ---guava之multimap

    guava之multimap 上一篇说的是Multiset它可以对存入的相同元素做一个计数的功能,那multimap呢? 一.概述 1.基本介绍和案例说明 multimap和Multiset的继承结果 ...

  6. CDN百科第三讲 | 如果用了云服务器,还需要做CDN加速吗?

    在全站上云的背景下,云计算已经不仅仅是大型互联网公司的独享概念,正在被更多的传统企业.中小企业甚至个人站长所采用.在众多云计算服务中,最常见两个产品就是云服务器和CDN,今天的CDN百科第三讲,就给大 ...

  7. iOS-pthread && NSThread && iOS9网络适配

    几个概念: 进程:"正在运行"应用程序(app)就是一个进程,它至少包含一个线程:            进程的作用:为应用程序开辟内存空间: 线程:CPU调度的最小单元:     ...

  8. 小程序-图片/文件本地缓存,减少CDN流量消耗

    写在前面 小程序网络图片读取: 在读取OSS图片CDN分发时流量大量消耗,导致资金费用增加. 网络图片比较大时,图片加载缓慢. 为了尽量减少上面两个问题,所以对已读的图片进行缓存处理,减少多次访问不必 ...

  9. 【深度思考】JDK8中日期类型该如何使用?

    在JDK8之前,处理日期时间,我们主要使用3个类,Date.SimpleDateFormat和Calendar. 这3个类在使用时都或多或少的存在一些问题,比如SimpleDateFormat不是线程 ...

  10. Nice Jquery Validator 常用规则整理

    一些简单规则 numeric: [/^[0-9]*$/, '请填写数值'], money: [/^(?:0|[1-9]\d*)(?:\.\d{1,2})?$/, "请填写有效的金额" ...