如何在linux中的进程(线程?)ID相关的优先级和调度程序策略?

如何在linux中的进程(线程?)ID相关的优先级和调度程序策略?,第1张

概述我正在调查如何让我的 Linux桌面体验保持流畅和交互,同时我在后台运行CPU密集型任务.这是我用来模拟CPU负载的示例程序(用Java编写): public class Spinner { public static void main(String[] args) { for (int i = 0; i < 100; i++) { (ne @H_301_6@ 我正在调查如何让我的 Linux桌面体验保持流畅和交互,同时我在后台运行cpu密集型任务.这是我用来模拟cpu负载的示例程序(用Java编写):

public class Spinner {    public static voID main(String[] args)    {        for (int i = 0; i < 100; i++) {            (new Thread(new Runnable() {                    public voID run() {                        while (true);                    }            })).start();        }    }}

当我在命令行上运行它时,我注意到我的桌面应用程序(例如文本编辑器)的交互性显着下降.我有一台双核机器,所以我并不为此感到惊讶.

为了解决这个问题,我首先想到的是使用renice -p 20< pID>来完善这个过程.然而,我发现这没有多大影响.我不得不使用类似ls / proc /< pID> / task |的方法来重新计算所有子进程. xargs renice 20 -p – 效果更好.

我对此非常困惑,因为我不希望线程拥有自己的进程ID.即使他们这样做,我也希望renice能够在整个过程中采取行动,而不仅仅是流程的主线.

有没有人清楚地了解这里发生了什么?似乎每个线程实际上是一个单独的进程(至少它有一个有效的PID).我知道历史上linux就像这样工作,但我相信几年前NPTL已经解决了.

我正在测试RHEL 5.4(linux内核2.6.18).

(顺便说一句.如果我尝试使用sched_setscheduler(< pID>,SCHED_BATCH,..)来尝试解决这个交互问题,我会注意到同样的效果.即,我需要对所有“子”进程进行此调用我在/ proc /< pID> / task中看到,在主程序pID上执行一次是不够的.)

解决方法 线程ID来自与PID相同的命名空间.这意味着每个线程都可以通过其TID进行单独寻址 – 某些系统调用确实适用于整个进程(例如,kill),但其他线程仅适用于单个线程.

调度程序系统调用通常在后一类中,因为这允许您在进程中为不同的调度程序属性提供不同的线程,这通常很有用.

总结

以上是内存溢出为你收集整理的如何在linux中的进程(线程?)ID相关的优先级和调度程序策略?全部内容,希望文章能够帮你解决如何在linux中的进程(线程?)ID相关的优先级和调度程序策略?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1032226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存