windows的进程线程优先级

luodaxia luodaxia     2023-03-22     361

关键词:

如果你曾经用过windows的任务管理器,就算是没有学习过windows的内核你也应该有听说过“进程优先级“这么一个概念。虽然你可能没有操作过,但是你很有可能在任务管理器里面见过它。今天稍微讲一下Windows的进程优先级以及线程优先级。

Windows是一个抢断式多线程操作系统,在并发的处理的时候最基本的执行单结构是线程,而一个进程内并不是一个执行上不可分割的结构,而是由多个线程组成的。每一个线程在内核中有一个优先级顺序,这个顺序的取值范围是0-31,数字越大优先级越高。如果有任意一个高顺序的线程需要执行,Windows绝对不会执行低优先级的线程。如果低优先级的线程一直不能被执行,那么线程就被饥饿了,这个时候抢占式操作系统的特点就体现出来了。

但是为什么平时都没有注意到呢,这里很大的原因是平时绝大多数工作线程的的优先级都是基本差不多一致的,每一个线程基本都能分配到时间片。但是有的时候我们需要创建一些较高优先级或者较低优先级的线程用来完成一些特殊的任务,我们就要了解一下这个线程的优先顺序到底是如何计算出来的。

虽然说这个优先顺序的取值范围是0-31,但是你并不能直接通过API来设定优先顺序。你能够设定一个进程优先级以及一个线程优先级。下面是一个Windows的优先级对应表:

线程相对

优先级

进程优先级类

Idle

Below Normal

Normal

Above Normal

High

Real-Time

Time-critical

15

15

15

15

15

31

Highest

6

8

10

12

15

26

Above normal

5

7

9

11

14

25

Normal

4

6

8

10

13

24

Below normal

3

5

7

9

12

23

Lowest

2

4

6

8

11

22

Idle

1

1

1

1

1

16

从这个表你可以看出来,实时优先级的进程拥有者极高的数值,通常情况下你不应该把你的进程优先级设置为实时。包括磁盘IO、鼠标显示、音频输出之类的系统功能都在实时优先级中的某些优先级中工作。如果你的线程优先级高于它们,并且需要大量CPU运算很有可能导致整个操作系统无法响应。不过微软在windows vista开始引入UAC之后开始限制了管理员账户的一些权限,现在你必须需要完全的UAC管理员权限才能把进程的优先级设置为实时,否则系统不会报错,但是最高会给你设置到高。

 

转自:

https://www.261day.com/windows%E7%9A%84%E8%BF%9B%E7%A8%8B%E7%BA%BF%E7%A8%8B%E4%BC%98%E5%85%88%E7%BA%A7%E4%B8%8E%E4%BF%AE%E6%94%B9/

windows怎样在调度线程到多核

...这些进程的内核线程(KTHREAD)链表的指针(分配地址空间),基优先级,在内核模式或是用户模式执行进程的线程的时间,处理器affinity(掩码,定义了哪个处理器能执行进程的线程),时间片值。在ETHREAD结构体中还存在着这样的信息:进程I... 查看详情

001-多线程基础-进程线程线程状态优先级用户线程和守护线程

一、进程与线程1、DOS系统【单进程系统】  最早的时候DOS有一个特点:只要电脑有病毒,那么电脑就死机了。  原因:传统的DOS系统属于单进程系统,即:在同一时间段内只允许有一个程序运行。2、Windows系统【多进程多线... 查看详情

回炉重造之重读windows核心编程-006-线程

...Windows2K开始就自带的内容索引服务程序,它能创建一个低优先级的线程,以定期打开磁盘上的文件内容并为之做索引。这样可以大大加快查找文件的效率。还可以使用磁盘碎片整理软件,使用低优先级线程运行,在系统空项期整... 查看详情

windows内核开发-windows内部概述-2-

...来存储线程专用数据和提供统一的访问语法。5:基本的优先级和当前(动 查看详情

我可以为普通优先级进程设置单个线程的优先级高于 15 吗?

】我可以为普通优先级进程设置单个线程的优先级高于15吗?【英文标题】:CanIsetasinglethread\'spriorityabove15foranormalpriorityprocess?【发布时间】:2012-05-1716:03:55【问题描述】:我有一个在Windows7上运行的数据采集应用程序,使用C++中... 查看详情

adb⭐️教你怎样查看app线程优先级

...本系列博客地址:传送门这篇教程原用来解决UnityMain线程优先级过高,导致SDK线程卡死的问题。查询了内网外网,都没找到,这大概是全网首发的教程,在驱动同事帮助下,找到了轻松的方法。一、线程和进程的区别进程:一个... 查看详情

Win32线程调度

...属于两个不同进程的线程,前提是它们都具有相同的基本优先级。我的问题是,如果我有两个应用程序,一个只有一个线程,另一个有50个线程,所有线程都具有相同的基本优先级,这是否意味着第二个进程比第一个进程享有更... 查看详情

线程优先级

调节线程优先级有什么作用?线程优先级究竟指的是什么?每个进程都有相应的优先级,优先级决定它何时运行和接收多少CPU时间。最终的优先级共32级,是从0到31的数值,称为基本优先级别(BasePriorityLeveL)。系统按照不同的... 查看详情

三.线程优先级和守护进程

1.线程的优先级  在操作系统中,线程可以划分优先级,优先级高的线程得到的CPU资源较多,也是CPU优先执行优先级较高的线程对象中的任务。  设置线程优先级有助于帮“线程规划器”确定在下一次选择哪一个线程... 查看详情

什么是“实时”进程优先级设置?

】什么是“实时”进程优先级设置?【英文标题】:Whatisthe\'realtime\'processprioritysettingfor?【发布时间】:2010-12-1210:46:12【问题描述】:根据我过去阅读的内容,我们鼓励您不要以编程方式更改Windows应用程序的优先级,如果这样做... 查看详情

线程与进程

...空间,可执行代码,数据,对象句柄集,环境变量,基础优先级,以及最大最小工作集。线程:系统处理机调度的基本单位。可执行进程中任意代码,包括正在被其他线程执行的代码。进程中的所有线程共享进程的虚拟地址空间... 查看详情

进程和线程新增

1.  renice改变正在运行进程的优先级。2.  bg把挂起的进程放到后台执行。3.  getpid()获得进程号  getppid()获得父进程的进程号。4.  WEXITSTATUS(s)在父进程中返回子进程号。5.  一个线程最大只有8M内存。6.  每个线程... 查看详情

windowsxp线程的调度策略

...线程的时间配额被减1,相当于1/3个时钟间隔;如果线程的优先级大于等于14,在等待事件出现时,线程的优先级被重置。  2.抢先  当一个高优先级线程的等待完成,即一个线程等待的事件出现,高优先级线程进入就绪状态,... 查看详情

操作系统-windows操作系统的线程调度了解这些

...系统支持内核级线程,调度单位是线程,它采用基于动态优先级的,抢占式调度,并结合时间配额的调整来完成调度一、几个前提知识点  就绪线程按优先级进入相应的就绪队列  系统总是选择优先级最高的就绪线程运行 ... 查看详情

android使用心得❄️|使用adb命令查看某个进程的线程优先级!(代码片段)

前言在上一篇博客中介绍了怎样使用ADB查看进程的优先级正好再写一篇博客说一下怎样查看这个进程中的线程优先级查看某个线程的优先级获取想要查看进程的PID查看线程优先级也很简单先执行命令:adbshell然后执行命令找... 查看详情

android线程优先级和进程oom_adj

参考技术A在处理app启动速度的时候,可以设置主线程的优先级,保证主线程占用的cpu足够久。进程的oom_adj,决定了当内存不够的时候,lmk会根据oom_adj的大小依次释放内存。android中对线程等级划分如下:设置线程的优先级分为... 查看详情

浅析linux下进程的调度策略与优先级

...了。在Linux中,进程调度器是基于进程的调度策略与调度优先级来决定调度哪个进程运行。调度策略主要包括:调度优先级的范围是0~99,数值越大,表示优先级越高。其中,SCHED_OTHER、SCHED_IDLE、SCHED_BACH为非实时调度策略,其调... 查看详情

ios开发底层之多线程探索-19(代码片段)

...的生命周期4.线程池的饱和策略RejectedExecutionHandler接口5.优先级翻转(IOvccpu优先级提升)6.优先级的影响因素三.多线程下的问题1.资源抢夺的解决方法四.GCD简单介绍1.GCD简介2.串行队列与并行队列(数据结构FIFO)总结1.任务的执行速度... 查看详情