Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >进程优先级和线程池优先级(C#)之间的任何关系

进程优先级和线程池优先级(C#)之间的任何关系
EN

Stack Overflow用户
提问于 2015-06-25 00:57:42
回答 3查看 1.4K关注 0票数 4

我理解线程池优先级应该/不能被正在运行的进程更改,但是在线程池上运行的特定任务的优先级是否与调用进程优先级有一定的定价?

换句话说,线程池中的所有任务是否都以相同的优先级运行,而不管调用进程的优先级如何?

谢谢

更新1:我应该更具体一些,我指的是Parallel.ForEach内部的线程

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-25 01:05:28

我知道线程池优先级应该/不能被正在运行的进程更改,

这可不太准确。您可以更改线程池的线程优先级(内部委托本身),它将以新的优先级运行,但默认优先级将在任务完成后恢复,然后将其发送回池。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ThreadPool.QueueUserWorkItem(delegate(object state) {
    Thread.CurrentThread.Priority = ThreadPriority.Highest;

    // Code in this function will run with Highest priority
});

在线程池上运行的特定任务的优先级是否与调用进程优先级相关联?

是的,而且它并不只适用于线程池的线程。在Windows中,优先级由其类(从IDLE_PRIORITY_CLASSREALTIME_PRIORITY_CLASS)提供。连同线程的优先级(从THREAD_PRIORITY_IDLETHREAD_PRIORITY_TIME_CRITICAL),它将用于计算线程的最终优先级。

来自MSDN:

将进程优先级类和线程优先级级别组合起来,形成每个线程的基本优先级。

请注意,它不仅仅是一个基本优先级加上一个偏移:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NORMAL_PRIORITY_CLASS + THREAD_PRIORITY_IDLE  == 1
NORMAL_PRIORITY_CLASS + THREAD_PRIORITY_TIME_CRITICAL == 15

但是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
REALTIME_PRIORITY_CLASS + THREAD_PRIORITY_IDLE == 16
REALTIME_PRIORITY_CLASS + THREAD_PRIORITY_TIME_CRITICAL == 31

此外,线程可以有一个临时的提升(由决定和管理)。请注意,进程也可以更改自己的优先级类。

换句话说,线程池中的所有任务是否都以相同的优先级运行,而不管调用进程的优先级如何?

不,线程的优先级取决于进程的优先级(见上一段),池中的每个线程可以临时拥有不同的优先级。还请注意,线程优先级不受调用线程优先级的影响:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ThreadPool.QueueUserWorkItem(delegate(object s1) {
    Thread.CurrentThread.Priority = ThreadPriority.Highest;

    ThreadPool.QueueUserWorkItem(delegate(object s2) {
        // This code is executed with ThreadPriority.Normal

        Thread.CurrentThread.Priority = ThreadPriority.Lowest;

        // This code is executed with ThreadPriority.Lowest
    });

    // This code is executed with ThreadPriority.Highest
});

编辑:.NET任务使用线程池,而上面写的仍然适用。例如,如果要使用Parallel.ForEach枚举一个排序规则以增加线程优先级,则必须在循环中这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Parallel.ForEach(items, item => {
    Thread.CurrentThread.Priority = ThreadPriority.Highest;

    // Your code here...
});

只是一个警告:当你改变优先级时要小心。例如,如果两个线程使用一个共享资源(由一个锁保护),那么会有许多竞争来获取该资源,其中一个具有最高优先级,那么您可能会以非常高的CPU使用率结束(因为spinning behavior of Monitor.Enter)。这只是一个问题,请参考MSDN了解更多细节(增加线程的优先级可能会导致性能下降)。

票数 5
EN

Stack Overflow用户

发布于 2015-06-25 01:01:31

线程池中的所有任务是否都以相同的优先级运行,而不管调用进程的优先级如何?

他们必须这样做。唯一在泳池里落下来的是一位代表。它保存对对象的引用,但不包含对放置对象的线程的引用。

票数 1
EN

Stack Overflow用户

发布于 2015-06-25 01:04:28

目前正在运行的程序具有相同的优先级。但是那些还没有运行的人排着队--所以在实践中,有一个“优先级”。更令人困惑的是,操作系统可以提高(并限制)线程优先级,例如,当线程池中的两个线程相互依赖时(例如,一个线程阻塞另一个线程)。当然,每当线程池被阻塞时,您就在浪费资源:D

也就是说,您根本不应该改变线程优先级,线程池或不更改线程优先级。你真的不需要这样做,线程(和进程)优先级也不像你所期望的那样工作--这是不值得的。保持一切正常,只需忽略存在Priority属性,就可以避免许多不必要的问题:)

你会在网上找到很多很好的解释--比如http://blog.codinghorror.com/thread-priorities-are-evil/。当然,这些都是过时的--但线程优先级的概念也是如此,事实上--它们是专为单核计算机设计的,而当时OSes并不擅长先发制人的多任务处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31045677

复制
相关文章
GridControl控件单元格居中显示
GridControl控件单元格居中显示 下面这样设置一步到位,不用再去Columns里面设置每一列的TextOptions属性了
别团等shy哥发育
2023/02/27
1.1K0
GridControl控件单元格居中显示
Excel VBA编程
在Excel中,数据只有文本,数值,日期值,逻辑值和错误值五种类型。但是在VBA中,数据类型跟Excel不完全相同。根据数据的特点,VBA将数据分为布尔型(boolean),字节型(byte),整数型(integer),单精度浮点型(single),双精度浮点型(double),货币型(currency),小数型(decimal),字符串型(string),日期型(date),对象型等等
全栈程序员站长
2022/08/11
45.8K0
Excel VBA编程
问与答95:如何根据当前单元格中的值高亮显示相应的单元格?
Q:这个问题很奇怪,需要根据在工作表Sheet1中输入的数值高亮显示工作表Sheet2中相应的单元格。具体如下:
fanjy
2021/03/12
3.9K0
Excel 宏编程的常用代码
我们常用Excel统计一些数据,如果善用VBA,就能自动做出各种复杂的报表,懒人就是追求一劳永逸!不过,也不是真懒啦,只是用智慧(脑力劳动)将自身从体力劳动中解放出来而已,人类也是这样进步的。我有这样的感觉,就是每见到一个语句或函数,都会激发出偷懒的灵感来,哈哈,很自恋了,其实好玩而已。
全栈程序员站长
2022/06/30
2.7K0
lable在单元格上得自适应
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/48733031
用户1451823
2018/09/13
3800
IOS 自定义UITableView单元格的高
1 import UIKit 2 3 class ViewController:UIViewController, UITableViewDataSource, UITableViewDelegate { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib. 8 9 let scr
用户5760343
2019/07/08
5480
IOS 自定义UITableView单元格的高
如何高亮显示包含有数字的单元格?
大海:在Excel里判断一个文本是否包含数字稍为麻烦一点儿,可以用find函数查找的方式来实现,比如下面的公式计算了一个文本里的数字出现位置的总和:
大海Power
2021/08/30
8150
为什么 wait/notify/notifyAll 在 Object 类定义而不是 Thread 类?
作者:Yujiaao 来源:segmentfault.com/a/1190000019962661
Java技术栈
2020/06/16
1.5K0
自定义单元格格式(判断版)
前两期分别介绍了自定义单元格格式的数字版、文本版。本期将分享最后一个内容,自定义单元格格式的条件判断。同时也会分享一些比较偏,比较少用的应用! 一、基础知识分享 概念1:条件格式只限于使用三个条件,其中两个是明确的,最后一个是不满足以上两个条件的其他情况。条件要在方括号内。 怎么用呢?给大家举个例子! 例子1:通过判断,将数字转化为不同的文本 代码:[>10]"大于10";[<0]"负数";"大于0、小于10" 代码注释:[>10] 判断条件,类似Excel中的IF,如果满足该条件显示“大于10”文本
用户1332619
2018/03/08
1.3K0
自定义单元格格式(判断版)
为什么我在 Linux 上使用 exa 而不是 ls?
我们生活在一个繁忙的世界里,当我们需要查找文件和数据时,使用 ls 命令可以节省时间和精力。但如果不经过大量调整,默认的 ls 输出并不十分舒心。当有一个 exa 替代方案时,为什么要花时间眯着眼睛看黑白文字呢?
用户1880875
2021/09/06
2K0
POI判断某个单元格是否是合并单元格
注:比如我们的数据是上面N个单元组成,且每个单元所占行数可能不同。第一列占据一列,中间数据每个占用一个单元格,最后一列与第一列占用相同的行数,这时我们需要获取起始单元格占用几行(起始行--结束行),获取到这些数据后我们就能读取中间单元格数据(这些数据可以作为上面单元的一个属性),下面给出具体代码:
johnhuster的分享
2022/03/28
3.2K0
POI判断某个单元格是否是合并单元格
VBA专题13:引用单元格/单元格区域的方法
在VBA中,可以通过多种不同的方式来引用工作表中的单元格/单元格区域。下面是一些引用方法的汇总。
fanjy
2021/08/31
3.9K0
老王,怎么完整SQL的显示日志,而不是???...
在常规项目的开发中可能最容易出问题的地方就在于对数据库的处理了,在大部分的环境下,我们对数据库的操作都是使用流行的框架,比如 Hibernate 、 MyBatis 等。
用户5224393
2019/10/16
1.4K0
在excel表格插入标黄的这列数据 实现合并单元格,并统计单元格个数?
前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个Python自动化办公的问题,一起来看看吧。
前端皮皮
2023/09/26
2000
在excel表格插入标黄的这列数据  实现合并单元格,并统计单元格个数?
VBA基础知识整理[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/136348.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/06
1.8K0
一起学Excel专业开发23:使用类模块创建对象2
在《一起学Excel专业开发22:使用类模块创建对象1》中,我们使用类模块创建了自已的对象CCell,通过这个对象可以创建任意多个对象实例,用来分析工作表或者多个区域中的单元格。
fanjy
2019/11/09
1.2K0
单元格的点击问题
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/51578744
用户1451823
2018/09/13
6460
单元格的点击问题
Excel技巧:使用上方单元格的值填充空单元格
有时候,工作表列中有许多空单元格,而不是在每行都重复相同的内容,这样可以使报表更容易阅读,然而也会导致一些问题,例如不方便排序或筛选数据。
fanjy
2022/04/13
3.4K0
Excel技巧:使用上方单元格的值填充空单元格
Excel VBA取白色单元格内容黄色的单元格的Address
哆哆Excel
2023/09/09
3460
Excel VBA取白色单元格内容黄色的单元格的Address
点击加载更多

相似问题

希望根据单元格名称显示值

116

我希望将整个单元格排列在特定的列中,而不是单个单元格。

13

直接在单元格A1上打印宏的输出而不是在msgbox上显示

22

在单元格单击上显示MsgBox --即使单元格已被选中

10

VBA:定义范围内的变量,而不是单元格名称

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文