C# 线程的优先级

举报
IC00 发表于 2022/09/26 19:41:22 2022/09/26
【摘要】 C#线程优先级是非常有必要去学习的一个知识点,我们要知道学习线程优先级的必要性,如果在应用程序中有多个线程在运行,但一些线程比另一些线程重要。在这种情况下,可以在一个进程中为不同的线程指定不同的优先级。一般情况下,如果有优先级较高的线程在工作,就不会给优先级较低的线程分配任何时间片,其优点是可以保证给接收用户输入的线程指定较高的优先级。在大多数的时间内,这个线程什么也不做

前言:

C#线程优先级是非常有必要去学习的一个知识点,我们要知道学习线程优先级的必要性,如果在应用程序中有多个线程在运行,但一些线程比另一些线程重要。在这种情况下,可以在一个进程中为不同的线程指定不同的优先级。一般情况下,如果有优先级较高的线程在工作,就不会给优先级较低的线程分配任何时间片,其优点是可以保证给接收用户输入的线程指定较高的优先级。在大多数的时间内,这个线程什么也不做,而其他线程则执行它们的任务。但是,如果用户输入了信息,这个线程就立即获得比应用程序中其他线程更高的优先级,在短时间内处理用户输入事件。所以说线程的优先级是非常有必要学习的一个知识点,创作不易点赞关注评论收藏,你的点赞是我创作的动力,也是我学习的方向!!!谢谢啦!!!

haoping21111.gif

一、线程优先级关键属性

C#线程优先级的规律:高优先级的线程可以完全阻止低优先级的线程执行,因此在改变线程的优先级时要特别小心。线程的优先级可以定义为ThreadPriority枚举的值,即Highest、AboveNormal、Normal、BelowNormal和Lowest。每个进程都有一个基本优先级,这些值与进程的优先级是有关系的。给线程指定较高的优先级,可以确保它在系统中优先运行。

AboveNormal 3 线程可以安排在具有优先级的线程之后Highest和具有优先级的线程之前Normal
BelowNormal 1 线程可以安排在具有优先级的线程之后Normal和具有优先级的线程之前Lowest
Highest 4 可以在具有任何其他优先级的线程之前调度线程。
Lowest 0 可以在具有任何其他优先级的线程之后调度线程。
Normal 2 线程可以安排在具有优先级的线程之后AboveNormal和具有优先级的线程之前BelowNormal。默认情况下,线程具有Normal优先级。

二、事例演示

只是做了简单的演示和调用这个优先级的方式,具体代码如下所示:

image.png

image.png

image.png

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
​
namespace SQlite
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }private void Form2_Load(object sender, EventArgs e)
        {
            Thread A = new Thread(new ThreadStart(T1));
            Thread B = new Thread(new ThreadStart(T2));
            Thread C = new Thread(new ThreadStart(T3));
            A.Priority = ThreadPriority.Highest;
            B.Priority = ThreadPriority.AboveNormal;
            C.Priority = ThreadPriority.AboveNormal;
            A.Start();
            B.Start();
            C.Start();
        }
        public static void T1()
        {
            for (int i = 1; i < 100; i++)
            {
                Console.WriteLine("A");     
            }
        }
        public static void T2()
        {
            for (int i = 1; i < 100; i++)
            {
                Console.WriteLine("B");
            }
        }
        public static void T3()
        {
            for (int i = 1; i < 100; i++)
            {
                Console.WriteLine("C");
            }
        }
    }
    }

总结:

一个线程的优先级并不是越高越好,应考虑整个进程的运行情况,做出最优的选择,才能达到最好的效果,同时优先级相同时按照时间片轮流运行,另外只有高优先级的线程停止休眠或者暂停时,低优先级的线程才会运行,这篇文章比较简单,只是简单的学习一下,对它有更多的认识,在有需求的时候最起码有路子,虽然很简单,但是也是可以学到东西的,我们学习了新的知识,对我们的知识储备及技术又有新的一点点的进步,C#的技术就是先简单再难嘛,积少成多之后才会成长才会进步,我们要不断的学习不断的探索,才能有学习的动力,才会有学习的欲望,创作不易,点赞评论收藏关注,嘿嘿,不喜勿喷!!!!

20190724912442_FIJlny

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。