pthread优先级和pthread策略有啥关系?

     2023-02-22     160

关键词:

【中文标题】pthread优先级和pthread策略有啥关系?【英文标题】:What is the relationship between pthread priority and pthread policy?pthread优先级和pthread策略有什么关系? 【发布时间】:2019-11-11 19:52:44 【问题描述】:

我目前正在学习 pthreads,并且正在努力理解线程优先级和策略之间的关系。到目前为止我所知道的:

线程优先级是一个整数,表示优先级。这个数字越高,线程被操作系统处理的优先级就越高。

线程策略决定了线程如何在具有共享优先级的进程中执行。 SCHED_RR 和 SCHED_FIFO 是持续执行的实时策略,除非发出明确的“睡眠”命令。因此,程序员在使用这些策略时必须非常小心地编写代码。 SCHED_OTHER 是一种非实时执行的循环策略。

但是,假设我有以下场景(假设每个线程不使用“睡眠”命令)。

Thread 1: priority = 0, policy = SCHED_OTHER
Thread 2: priority = 1, policy = SCHED_OTHER

// would thread 1 run at all? 

Thread 1: priority = 0, policy = SCHED_RR
Thread 2: priority = 1, policy = SCHED_RR

// would thread 1 run at all? 

我很困惑线程策略是否会影响线程优先级,或者线程优先级是否总是胜过策略。

编辑:找到了一个可以解决我大部分困惑的网页:https://computing.llnl.gov/tutorials/pthreads/man/sched_setscheduler.txt

【问题讨论】:

您说的是“优先级”,但您是在询问通过 linux setpriority() 系统调用设置的值吗?或者您是在询问通过sched_setattr() 系统调用设置的静态优先级SCHED_RR 是使用线程静态优先级的“实时”策略,而SCHED_OTHER 是使用setpriority() 值的“分时”策略,并且要求线程的静态优先级为零。 我在询问 pthread_setschedparam() 函数调用man7.org/linux/man-pages/man3/pthread_setschedparam.3.html SCHED_OTHER 的文档说该策略只能在线程的静态优先级为零时应用。所以如果“优先级”表示“静态优先级”,那么priority=1, policy=SCHED_OTHER就是一个无效的情况。 【参考方案1】:

SCHED_RR 的文档说它与 SCHED_FIFO 相同,除非在某些情况下两个或多个线程具有相同的静态优先级。

SCHED_FIFO 的文档清楚地表明,如果具有较高静态优先级的线程已准备好运行但未运行,并且如果一个或多个具有较低静态优先级的线程正在运行,则较低优先级的线程之一将被优先级更高的线程抢占。

线程 1 是否会运行 [在 SCHED_RR 案例中]?

这取决于。线程 0 在做什么?系统有多少个 CPU?如果在只有一个 CPU 的系统上只有这两个线程,那么只要线程 0 不想运行,就会允许线程 1 运行。

一般来说,当您使用静态优先级时,您希望最高优先级的线程做最少的工作。高优先级线程应该花费大部分时间等待一些事件。然后当事件发生时,线程应该立即确认它,然后如果需要某种后续计算,则可能会向低优先级线程发出信号。

线程 1 是否会运行 [在 SCHED_OTHER 情况下]?

正如我在评论中提到的,如果您在谈论 静态优先级(即,由 sched_setattr() 系统调用设置,那么这个问题毫无意义,因为在 SCHED_OTHER 下调度的线程策略都需要具有相同的静态优先级——零。

【讨论】:

pthread_cond_wait 和 pthread_mutex_lock 优先级?

】pthread_cond_wait和pthread_mutex_lock优先级?【英文标题】:pthread_cond_waitandpthread_mutex_lockpriority?【发布时间】:2017-11-0823:04:14【问题描述】:我有多个读线程和一个写线程。如果我在其中一个读取线程上锁定互斥锁并从中发送广播... 查看详情

pthread_join 和 pthread_mutex_lock 有啥区别?

】pthread_join和pthread_mutex_lock有啥区别?【英文标题】:Whatsthedifferencebetweenpthread_joinandpthread_mutex_lock?pthread_join和pthread_mutex_lock有什么区别?【发布时间】:2015-10-0217:10:13【问题描述】:以下代码取自thissite,它展示了如何使用互... 查看详情

使用 pthread 调度策略和优先级没有任何区别

】使用pthread调度策略和优先级没有任何区别【英文标题】:Schedulingpolicyandpriorityusingpthreaddoesnotmakeanydifference【发布时间】:2021-12-2506:54:38【问题描述】:我正在使用pthread运行一个简单的多线程程序。考虑使用实时调度程序(SCHE... 查看详情

在强化学习中,最优策略和分段最优策略有啥区别?

】在强化学习中,最优策略和分段最优策略有啥区别?【英文标题】:Inreinforcementlearning,whatisthedifferencebetweenoptimalpolicyandpiece-wiseoptimalpolicy?在强化学习中,最优策略和分段最优策略有什么区别?【发布时间】:2017-03-0912:34:37【问... 查看详情

不应该使用查询参数的 IT 策略有啥理由吗?

】不应该使用查询参数的IT策略有啥理由吗?【英文标题】:AnyjustificationforanITpolicythatqueryparametersshouldnotbeused?不应该使用查询参数的IT策略有什么理由吗?【发布时间】:2009-12-2404:17:44【问题描述】:去年收购了我的公司,该公... 查看详情

NSOperationQueue 与 pthread 优先级

】NSOperationQueue与pthread优先级【英文标题】:NSOperationQueuevspthreadpriority【发布时间】:2012-04-2709:23:03【问题描述】:我有这个问题:我有一个使用一些线程的C++代码。这些线程是pthread类型的。在我的iPhone应用程序中,我使用NSOper... 查看详情

POSIX 线程 pthread_setschedparam

...:2011-12-2709:33:21【问题描述】:谁能帮助我如何更改线程优先级或线程策略?我从主线程创建了一个子线程,当我尝试使用pthread_setschedprio(pthread_self(),2);和pthread_setschedparam(pthread_self(),SCH 查看详情

如何使用 pthreads 以正确的方式设置两个线程之一的优先级

】如何使用pthreads以正确的方式设置两个线程之一的优先级【英文标题】:Howtosetinproperwaypriorityofoneoftwothreadsusingpthreads【发布时间】:2018-07-0512:55:18【问题描述】:示例。我想在单独的线程中分享getFrame和processFrame。我认为我将... 查看详情

使用 pthreads 时的后台线程(很好,优先级)

】使用pthreads时的后台线程(很好,优先级)【英文标题】:Backgroundthreadswhenusingpthreads(nice,priority)【发布时间】:2012-12-0712:08:08【问题描述】:我有一个GUI应用程序,它使用pthreads执行一些繁重的后台处理。当后台处理正在运行... 查看详情

第10章线程控制_线程属性和线程优先级

3.线程属性3.1线程属性结构体(1)pthread_attr_t结构体 (2)线程属性初始化和销毁头文件#include<pthread.h>函数intpthread_attr_init(pthread_attr_t*attr);//初始化intpthread_attr_destroy(pthread_attr_t*attr);//销毁返回值成功返回0,否则返回错误... 查看详情

调用 gcc _without_ -pthread 有啥好处?

】调用gcc_without_-pthread有啥好处?【英文标题】:Anyadvantagetoinvokinggcc_without_-pthread?调用gcc_without_-pthread有什么好处?【发布时间】:2016-03-1808:52:40【问题描述】:我们知道添加-pthreadmakesGCCusereentrant/thread-safecode(编译C/C++代码时)... 查看详情

pthread_attr_setinheritsched,pthread_attr_setschedparam函数详解(代码片段)

线程优先级属性在任务的概念当中由于运行的需求,我们常常需要给任务一定分类,在系统里面就诞生出来所谓线程优先级实时线程    单位时间相应能力强,里面拥有1-99个静态优先级,数字越大,优先级... 查看详情

pthread_attr_setinheritsched,pthread_attr_setschedparam函数详解(代码片段)

线程优先级属性在任务的概念当中由于运行的需求,我们常常需要给任务一定分类,在系统里面就诞生出来所谓线程优先级实时线程    单位时间相应能力强,里面拥有1-99个静态优先级,数字越大,优先级... 查看详情

我的 aws 角色的信任策略有啥问题,它不能被假定为跨账户?

】我的aws角色的信任策略有啥问题,它不能被假定为跨账户?【英文标题】:What\'swrongwiththetrustpolicyonmyawsrolethatitcan\'tbeassumedcross-accounts?我的aws角色的信任策略有什么问题,它不能被假定为跨账户?【发布时间】:2022-01-1920:29:24... 查看详情

这个c语言啥意思啊#include<pthread.h>

这个C语言什么意思啊#include<pthread.h>#include<pthread.h>是文件包含命令,其意义是把尖括号<>内指定的文件pthread.h包含到本程序来程序用到多线程编程的函数,应该把pthread.h包含进来pthread.h在windows系统中没有,要单独下... 查看详情

pthread_setschedparam(设置线程的优先级)(代码片段)

...outine)(void*),void*arg);来创建线程,但是如何设置线程的优先级呢?在讨论这个问题的时候,我们先要确定当前线程使用的调度策略,posix提供了in 查看详情

pthread_setschedparam(设置线程的优先级)(代码片段)

...outine)(void*),void*arg);来创建线程,但是如何设置线程的优先级呢?在讨论这个问题的时候,我们先要确定当前线程使用的调度策略,posix提供了in 查看详情

带 pthread 的后台线程

...,因为它的工作有时很紧张。有什么方法可以设置较低的优先级或不同的调度(或两者的组合),以便主线程有更多的CPU时间运行?【问题讨论】:【参考方案1】:这不是逐字回答您的问题,而是在Con 查看详情